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使用PythonMagick将jpg图片转换成ico图片的方法
Mar 26 Python
Python实现单词拼写检查
Apr 25 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
对Python 语音识别框架详解
Dec 24 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
django celery redis使用具体实践
Apr 08 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
python爬取天气数据的实例详解
Nov 20 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
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
javascript this用法小结
2008/12/19 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
学校司机岗位职责
2013/11/14 职场文书
同学会主持词
2014/03/18 职场文书
大气污染防治方案
2014/05/19 职场文书
企业宣传工作方案
2014/06/02 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
精神病医院见习报告
2014/11/03 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
Navicat for MySQL的使用教程详解
2021/05/27 MySQL