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列表去重方法
Jan 17 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
关于python2 csv写入空白行的问题
Jun 22 Python
Python 经典面试题 21 道【不可错过】
Sep 21 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
django项目登录中使用图片验证码的实现方法
Aug 15 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
TensorFlow固化模型的实现操作
May 26 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
python绘制高斯曲线
Feb 19 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下连接mssql2005的代码
2011/01/17 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
React组件生命周期详解
2017/07/03 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
浅谈vue父子组件怎么传值
2018/07/21 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
python实现的简单窗口倒计时界面实例
2015/05/05 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
selenium自动化测试入门实战
2020/12/21 Python
新大陆软件面试题
2016/11/24 面试题
运动会通讯稿400字
2014/01/28 职场文书
英文慰问信
2015/02/14 职场文书
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
php png失真的原因及解决办法
2021/11/17 PHP
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android
关于Redis的主从复制及哨兵问题
2022/06/16 Redis
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang