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格式化css文件的方法
Mar 10 Python
python脚本设置系统时间的两种方法
Feb 21 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
详解Python字典小结
Oct 20 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
python安装scipy的方法步骤
Jun 26 Python
python超时重新请求解决方案
Oct 21 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
一行代码python实现文件共享服务器
Apr 22 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 删除无限级目录与文件代码共享
2008/11/22 PHP
PHP 程序员应该使用的10个组件
2009/10/31 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
Python中pygame安装方法图文详解
2015/11/11 Python
python&amp;MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
python 日期操作类代码
2018/05/05 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
python是否适合网页编程详解
2019/10/04 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
出纳岗位职责模板
2013/11/27 职场文书
校本教研工作方案
2014/01/14 职场文书
建材投资建议书
2014/05/16 职场文书
员工年终考核评语
2014/12/31 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
让生命充满爱观后感
2015/06/08 职场文书
施工安全协议书
2016/03/22 职场文书