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查询sqlite数据表的方法
May 08 Python
使用python实现省市三级菜单效果
Jan 20 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
多个应用共存的Django配置方法
May 30 Python
python读写LMDB文件的方法
Jul 02 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
python设置环境变量的作用和实例
Jul 09 Python
Python协程 yield与协程greenlet简单用法示例
Nov 22 Python
利用Python脚本实现自动刷网课
Feb 03 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 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中实现图片的锐化
2006/10/09 PHP
php $_ENV为空的原因分析
2009/06/01 PHP
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
php定界符
2014/06/19 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
PHP类的封装与继承详解
2015/09/29 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
Python自定义一个异常类的方法
2019/06/27 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
python实现局域网内实时通信代码
2019/12/22 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
销售主管的自我评价分享
2014/01/03 职场文书
自我鉴定书面格式
2014/01/13 职场文书
技能竞赛活动方案
2014/02/21 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫