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完全新手教程
Feb 08 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
pycharm的console输入实现换行的方法
Jan 16 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
Oct 06 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
python基于tkinter制作下班倒计时工具
Apr 28 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
一个用mysql_odbc和php写的serach数据库程序
2006/10/09 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
完美的php分页类
2017/10/24 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
详解js创建对象的几种方法及继承
2019/04/12 Javascript
javascript实现日历效果
2019/06/17 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
Python常用模块用法分析
2014/09/08 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
九年级化学教学反思
2014/01/28 职场文书
环保建议书
2014/03/12 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python