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将人民币转换大写的脚本代码
Feb 10 Python
Python实现端口复用实例代码
Jul 03 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
Python3实现从指定路径查找文件的方法
May 22 Python
详解python分布式进程
Oct 08 Python
详解python中index()、find()方法
Aug 29 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
python实现画循环圆
Nov 23 Python
PyQt5 界面显示无响应的实现
Mar 26 Python
Python中使用socks5设置全局代理的方法示例
Apr 15 Python
Python flask框架实现浏览器点击自定义跳转页面
Jun 04 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 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中使用Oracle数据库(3)
2006/10/09 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
Python实现Linux监控的方法
2019/05/16 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
python烟花效果的代码实例
2020/02/25 Python
Django视图类型总结
2021/02/17 Python
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
毕业生个人求职自荐信
2014/02/26 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL