Python数据结构之单链表详解


Posted in Python onSeptember 12, 2017

本文实例为大家分享了Python数据结构之单链表的具体代码,供大家参考,具体内容如下

# 节点类
class Node():
  __slots__=['_item','_next'] # 限定Node实例的属性
  def __init__(self,item):
    self._item = item
    self._next = None # Node的指针部分默认指向None
  def getItem(self):
    return self._item
  def getNext(self):
    return self._next
  def setItem(self,newitem):
    self._item = newitem
  def setNext(self,newnext):
    self._next=newnext

# 单链表
class SingleLinkedList():
  def __init__(self):
    self._head = None #初始化链表为空 始终指向链表的头部
    self._size = 0 # 链表大小

  # 返回链表的大小
  def size(self):
    current = self._head
    count = 0
    while current != None:
      count += 1
      current = current.getNext()
    return count

  # 遍历链表
  def travel(self):
    current = self._head
    while current != None:
      print(current.getItem())
      current = current.getNext()
  # 检查链表是否为空
  def isEmpty(self):
    return self._head == None

  # 在链表前端添加元素
  def add(self,item):
    temp = Node(item) # 创建新的节点
    temp.setNext(self._head) # 新创建的next指针指向_head
    self._head = temp # _head指向新创建的指针

  # 在链表尾部添加元素
  def append(self,item):
    temp = Node(item)
    if self.isEmpty():
      self._head = temp # 若为空表就直接插入
    else:
      current = self._head
      while current.getNext() != None:
        current = current.getNext() # 遍历列表
      current.setNext(temp) # 此时current为链表最后的元素,在末尾插入

  # 检索元素是否在链表中
  def search(self,item):
    current = self._head
    founditem = False
    while current != None and not founditem:
      if current.getItem() == item:
        founditem = True
      else:
        current = current.getNext()
    return founditem

  # 索引元素在表中的位置
  def index(self,item):
    current = self._head
    count = 0
    found = None
    while current != None and not found:
      count += 1
      if current.getItem() == item:
        found = True
      else:
        current = current.getNext()
    if found:
      return count
    else:
      return -1 # 返回-1表示不存在

  # 删除表中的某项元素
  def remove(self,item):
    current = self._head
    pre = None
    while current!=None:
      if current.getItem() == item:
        if not pre:
          self._head = current.getNext()
        else:
          pre.setNext(current.getNext())
        break
      else:
        pre = current
        current = current.getNext()

  # 在链表任意位置插入元素
  def insert(self,pos,item):
    if pos <= 1:
      self.add(item)
    elif pos > self.size():
      self.append(item)
    else:
      temp = Node(item)
      count = 1
      pre = None
      current = self._head
      while count < pos:
        count += 1
        pre = current
        current = current.getNext()
      pre.setNext(temp)
      temp.setNext(current)


if __name__=='__main__':
  a=SingleLinkedList()
  for i in range(1,10):
    a.append(i)
  print('链表的大小',a.size())
  a.travel()
  print(a.search(6))
  print(a.index(5))
  a.remove(4)
  a.travel()
  a.insert(4,100)
  a.travel()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python入门篇之编程习惯与特点
Oct 17 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
python turtle 绘制太极图的实例
Dec 18 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
通过python检测字符串的字母
Feb 18 Python
python软件都是免费的吗
Jun 18 Python
Python Selenium模块安装使用教程详解
Jul 09 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
python处理Excel xlrd的简单使用
Sep 12 #Python
Python3.6简单操作Mysql数据库
Sep 12 #Python
Python文件和流(实例讲解)
Sep 12 #Python
Anaconda多环境多版本python配置操作方法
Sep 12 #Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 #Python
python监控linux内存并写入mongodb(推荐)
Sep 11 #Python
python学习教程之Numpy和Pandas的使用
Sep 11 #Python
You might like
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
php array的学习笔记
2012/05/16 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
jquery 最简单的属性菜单
2009/10/08 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
小程序自定义弹框效果
2020/11/16 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
求职信范文大全
2014/05/26 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
2014年绿化工作总结
2014/12/09 职场文书
考研复习计划
2015/01/19 职场文书
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers