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中的__init__()方法
May 02 Python
在Python中用keys()方法返回字典键的教程
May 21 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
python redis 删除key脚本的实例
Feb 19 Python
Python3.5装饰器原理及应用实例详解
Apr 30 Python
python面试题Python2.x和Python3.x的区别
May 28 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
Python数据结构dict常用操作代码实例
Mar 12 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
Python基于mediainfo批量重命名图片文件
Dec 29 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高手?学会“懒惰”的编程
2006/12/05 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
php 前一天或后一天的日期
2008/06/28 PHP
thinkphp实现数组分页示例
2014/04/13 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
浅析javascript 定时器
2014/12/23 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
python实现装饰器、描述符
2018/02/28 Python
解决python "No module named pip" 的问题
2018/10/13 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
交通专业个人自荐信格式
2013/09/23 职场文书
中学教师实习自我鉴定
2013/09/28 职场文书
综治工作心得体会
2014/09/11 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书