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实现一个简单的线程池
Apr 07 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
Feb 14 Python
详解Python中 sys.argv[]的用法简明解释
Dec 20 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
Python后台开发Django会话控制的实现
Apr 15 Python
python 字典操作提取key,value的方法
Jun 26 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
深入了解Python enumerate和zip
Jul 16 Python
python 批量将中文名转换为拼音
Feb 07 Python
浅谈Python numpy创建空数组的问题
May 25 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 include任意文件或URL介绍
2014/04/29 PHP
PHP在线书签系统分享
2016/01/04 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
js压缩利器
2007/02/20 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
padas 生成excel 增加sheet表的实例
2018/12/11 Python
利用nohup来开启python文件的方法
2019/01/14 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
房地产推广策划方案
2014/05/19 职场文书
十佳家长事迹材料
2014/08/26 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
文艺晚会开场白
2015/05/29 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS