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语言中的按位运算符
Nov 26 Python
python调用windows api锁定计算机示例
Apr 17 Python
Python下线程之间的共享和释放示例
May 04 Python
python抓取百度首页的方法
May 19 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
Python 实现使用空值进行赋值 None
Mar 12 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
十天学会php之第五天
2006/10/09 PHP
escape unescape的php下的实现方法
2007/04/27 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
Python第三方库的安装方法总结
2016/06/06 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
Python中的集合介绍
2019/01/28 Python
python 生成器需注意的小问题
2020/09/29 Python
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
高中生职业规划范文
2014/03/09 职场文书
函授生自我鉴定
2014/03/25 职场文书
学校联谊协议书
2014/09/16 职场文书
出生证明格式
2015/06/15 职场文书
春节随笔
2015/08/15 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技