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的for和break循环结构中使用else语句的技巧
May 24 Python
利用python写个下载teahour音频的小脚本
May 08 Python
python flask 多对多表查询功能
Jun 25 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
python3 读写文件换行符的方法
Apr 09 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
python 三元运算符使用解析
Sep 16 Python
python实现的Iou与Giou代码
Jan 18 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
Python super()函数使用及多重继承
May 06 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 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生成EXCEL的东东
2006/10/09 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
php导出word格式数据的代码实例
2013/11/25 PHP
Yii配置文件用法详解
2014/12/04 PHP
PHP引用返回用法示例
2016/05/28 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
Smarty模板语法详解
2019/07/20 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
基于zepto.js简单实现上传图片
2016/06/21 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python fileinput模块使用介绍
2014/11/30 Python
Python pickle模块用法实例
2015/04/14 Python
浅谈Python中的私有变量
2018/02/28 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
电子专业推荐信范文
2013/11/18 职场文书
劳资专员岗位职责
2013/12/27 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python
Java使用HttpClient实现文件下载
2022/08/14 Java/Android