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 json encode datetime类型
Dec 28 Python
Python列表和元组的定义与使用操作示例
Jul 26 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
便捷提取python导入包的属性方法
Oct 15 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
Python3 sys.argv[ ]用法详解
Oct 24 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
tensorflow中的数据类型dtype用法说明
May 26 Python
让文件路径提取变得更简单的Python Path库
May 27 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 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入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
深入理解Javascript中的this关键字
2015/03/27 Python
python实现发送邮件功能
2017/07/22 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
试述DBMS的主要功能
2016/11/13 面试题
自荐信要包含哪些内容
2013/11/06 职场文书
酒店前厅员工辞职信
2014/01/08 职场文书
中学教师教育感言
2014/02/21 职场文书
难忘的一课教学反思
2014/04/30 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
单位考核聘任报告
2015/03/02 职场文书
实习介绍信范文
2015/05/05 职场文书
消防安全月活动总结
2015/05/08 职场文书