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标准日志模块logging的使用方法
Nov 01 Python
Python群发邮件实例代码
Jan 03 Python
实例解析Python中的__new__特殊方法
Jun 02 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
Python之re操作方法(详解)
Jun 14 Python
python下setuptools的安装详解及No module named setuptools的解决方法
Jul 06 Python
python如何对实例属性进行类型检查
Mar 20 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
pytorch forward两个参数实例
Jan 17 Python
深入解析NumPy中的Broadcasting广播机制
May 30 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
Javascript实现动态时钟效果
2018/11/17 Javascript
python使用cookielib库示例分享
2014/03/03 Python
介绍Python中几个常用的类方法
2015/04/08 Python
Python实现数据库编程方法详解
2015/06/09 Python
Python argv用法详解
2016/01/08 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
python代码编写计算器小程序
2020/03/30 Python
Python属性和内建属性实例解析
2020/01/14 Python
Django Serializer HiddenField隐藏字段实例
2020/03/31 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
四年级评语大全
2014/04/21 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
小学六一主持词开场白
2015/05/28 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
详解MySQL中的pid与socket
2021/06/15 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL