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修改字典内key对应值的方法
Jul 11 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
Python元组及文件核心对象类型详解
Feb 11 Python
python list是否包含另一个list所有元素的实例
May 04 Python
python字典的遍历3种方法详解
Aug 10 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
Python线程条件变量Condition原理解析
Jan 20 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
Python短信轰炸的代码
Mar 25 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
自学python用什么系统好
Jun 23 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 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脚本加密专家php解密算法
2020/09/13 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
php封装的page分页类完整实例
2016/10/18 PHP
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
详解JavaScript函数
2015/12/01 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
python多线程扫描端口(线程池)
2019/09/04 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
HTML5的新特性(1)
2016/03/03 HTML / CSS
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
90后毕业生的求职信范文
2013/09/21 职场文书
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
法制宣传教育方案
2014/05/09 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
美丽的大脚观后感
2015/06/03 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
车辆挂靠协议书
2016/03/23 职场文书
浅谈python数据类型及其操作
2021/05/25 Python
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB