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使用pil生成缩略图的方法
Mar 26 Python
在类Unix系统上开始Python3编程入门
Aug 20 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
解决python flask中config配置管理的问题
Jul 26 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
python用Configobj模块读取配置文件
Sep 26 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 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
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
Yii实现简单分页的方法
2016/04/29 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python实现计算最小编辑距离
2016/03/17 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
python实现k-means聚类算法
2018/02/23 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
django的csrf实现过程详解
2019/07/26 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
上海天奕面试题笔试题
2015/04/19 面试题
高中军训感想300字
2014/03/04 职场文书
二年级学生评语大全
2014/04/23 职场文书
股东合作协议书
2014/09/12 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js