python数据结构链表之单向链表(实例讲解)


Posted in Python onJuly 25, 2017

单向链表

单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。

python数据结构链表之单向链表(实例讲解)

表元素域elem用来存放具体的数据。

链接域next用来存放下一个节点的位置(python中的标识)

变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。

节点实现

class Node(object):
 """单链表的结点"""
 def __init__(self,item):
  # item存放数据元素
  self.item = item
  # next是下一个节点的标识
  self.next = None

单链表的操作

is_empty() 链表是否为空

length() 链表长度

travel() 遍历整个链表

add(item) 链表头部添加元素

append(item) 链表尾部添加元素

insert(pos, item) 指定位置添加元素

remove(item) 删除节点

search(item) 查找节点是否存在

单链表的实现

class Singlepnkpst(object):
 """单链表"""
 def __init__(self):
  self.__head = None
 
 def is_empty(self):
  """判断链表是否为空"""
  return self.__head == None
 
 def length(self):
  """链表长度"""
  # cur初始时指向头节点
  cur = self.__head
  count = 0
  # 尾节点指向None,当未到达尾部时
  while cur != None:
   count += 1
   # 将cur后移一个节点
   cur = cur.next
  return count
 
 def travel(self):
  """遍历链表"""
  cur = self.__head
  while cur != None:
   print(cur.item,end = ' ')
   cur = cur.next
  print("")

头部添加元素

python数据结构链表之单向链表(实例讲解)

def add(self, item):
"""头部添加元素"""

# 先创建一个保存item值的节点

node = Node(item)

# 将新节点的链接域next指向头节点,即_head指向的位置

node.next = self.__head

# 将链表的头_head指向新节点

self.__head = nod

尾部添加元素

def append(self, item):
"""尾部添加元素"""

node = Node(item)

# 先判断链表是否为空,若是空链表,则将_head指向新节点

if self.is_empty():


self.__head = node

# 若不为空,则找到尾部,将尾节点的next指向新节点

else:


cur = self.__head


while cur.next != None:



cur = cur.next


cur.next = node

指定位置添加元素

python数据结构链表之单向链表(实例讲解)

def insert(self, pos, item):
"""指定位置添加元素"""

# 若指定位置pos为第一个元素之前,则执行头部插入

if pos <= 0:
 
self.add(item)

# 若指定位置超过链表尾部,则执行尾部插入

epf pos > (self.length()-1):
 
self.append(item)

# 找到指定位置

else:


node = Node(item)


count = 0


# pre用来指向指定位置pos的前一个位置pos-1,初始从头节点开始移动到指定位置


pre = self.__head


while count < (pos-1):



count += 1



pre = pre.next


# 先将新节点node的next指向插入位置的节点


node.next = pre.next


# 将插入位置的前一个节点的next指向新节点


pre.next = node

删除节点

python数据结构链表之单向链表(实例讲解)

def remove(self,item):
"""删除节点"""

cur = self.__head

pre = None

while cur != None:

# 找到了指定元素

if cur.item == item:


# 如果第一个就是删除的节点


if not pre:



# 将头指针指向头节点的后一个节点



self.__head = cur.next


else:



# 将删除位置前一个节点的next指向删除位置的后一个节点



pre.next = cur.next



break


else:



# 继续按链表后移节点



pre = cur



cur = cur.next

查找节点是否存在

def search(self,item):
"""链表查找节点是否存在,并返回True或者False"""

cur = self.__head

while cur != None:


if cur.item == item:



return True



cur = cur.next


return False

以上这篇python数据结构链表之单向链表(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python判断IP地址合法性的方法实例
Mar 13 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
Python堆排序原理与实现方法详解
May 11 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
python 实现一个反向单位矩阵示例
Nov 29 Python
python绘制彩虹图
Dec 16 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
Python基于内置库pytesseract实现图片验证码识别功能
Feb 24 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
python如何支持并发方法详解
Jul 25 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
用python 绘制茎叶图和复合饼图
Feb 26 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 #Python
利用django如何解析用户上传的excel文件
Jul 24 #Python
Python编程之变量赋值操作实例分析
Jul 24 #Python
Python模块结构与布局操作方法实例分析
Jul 24 #Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 #Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 #Python
python引入导入自定义模块和外部文件的实例
Jul 24 #Python
You might like
PHP模板引擎SMARTY
2006/10/09 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
2014/05/15 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
如何进行Linux分区优化
2013/02/12 面试题
经济国贸专业求职信
2014/06/18 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
Golang中interface{}转为数组的操作
2021/04/30 Golang
了解Redis常见应用场景
2021/06/23 Redis
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers