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版的文曲星猜数字游戏代码
Sep 02 Python
python中查看变量内存地址的方法
May 05 Python
python+opencv轮廓检测代码解析
Jan 05 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
Python简单I/O操作示例
Mar 18 Python
Python面向对象进阶学习
May 21 Python
Python基础学习之函数方法实例详解
Jun 18 Python
python3射线法判断点是否在多边形内
Jun 28 Python
python实现两个文件夹的同步
Aug 29 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
python有序查找算法 二分法实例解析
Feb 18 Python
PyTorch在Windows环境搭建的方法步骤
May 12 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或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
jQuery checkbox全选/取消全选实现代码
2009/11/14 Javascript
javascript天然的迭代器
2010/10/29 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
Python根据成绩分析系统浅析
2019/02/11 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
Python中Selenium模块的使用详解
2020/10/09 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
经济与贸易专业应届生求职信
2013/11/19 职场文书
工程承诺书怎么写
2014/05/24 职场文书
法定代表人资格证明书
2014/09/11 职场文书
2014年司法所工作总结
2014/11/22 职场文书
会计求职自荐信
2015/03/26 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL