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之wxPython菜单使用详解
Sep 28 Python
python插入排序算法实例分析
Jul 03 Python
Python实现的knn算法示例
Jun 14 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
Python操作rabbitMQ的示例代码
Mar 19 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
python mysql中in参数化说明
Jun 05 Python
python opencv 实现读取、显示、写入图像的方法
Jun 08 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 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
基于mysql的论坛(2)
2006/10/09 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
2011/10/09 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
Javascript 圆角div的实现代码
2009/10/15 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
Python数据类型详解(一)字符串
2016/05/08 Python
对于Python中RawString的理解介绍
2016/07/07 Python
Python中list初始化方法示例
2016/09/18 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
python实现大量图片重命名
2020/03/23 Python
python 实现单通道转3通道
2019/12/03 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
公务员转正考察材料
2014/02/07 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
同意报考证明
2015/06/17 职场文书
环保建议书范文
2015/09/14 职场文书