本文实例讲述了Python数据结构与算法之链表定义与用法。分享给大家供大家参考,具体如下:

本文将为大家讲解:
(1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计
(2)链表类插入和删除等成员函数实现时需要考虑的边界条件,
prepend(头部插入)、pop(头部删除)、append(尾部插入)、pop_last(尾部删除)
2.1 插入:
空链表
链表长度为1
插入到末尾
2.2 删除
空链表
链表长度为1
删除末尾元素
(3)从单链表到单链表的一众变体:
带尾节点的单链表
循环单链表
双链表
1. 链表节点的定义
class LNode: def __init__(self, elem, next_=None): self.elem = elem self.next = next_
2. 单链表的实现
重点理解插入、删除的实现及其需要考虑的边界条件:
class LinkedListUnderflow(ValueError):
pass
class LList:
def __init__(self):
self._head = None
def is_empty(self):
return self._head is None
def prepend(self, elem):
self._head = LNode(elem, self._head)
def pop(self):
if self._head is None:
raise LinkedListUnderflow('in pop')
e = self._head.elem
self._head = self._head.next
return e
def append(self, elem):
if self._head is None:
self._head = LNode(elem)
return
p = self._head
while p.next is not None:
p = p.next
p.next = LNode(elem)
def pop_last(self):
if self._head is None:
raise LinkedListUnderflow('in pop_last')
p = self._head
if p.next is None:
e = p.elem
self._head = None
return e
while p.next.next is not None:
p = p.next
e = p.next.elem
p.next = None
return e
简单总结:
(0)能够访问 p.next.next 的前提是 p.next 不为空;
(1)尾部插入,如果链表不为空,需且仅需改变的是尾部节点的指针;
(2)尾部删除,如果链表长度不为空,需且仅需改变的是倒数第二个节点的指针。
单链表的简单变形:具有尾部节点的单链表
class LList1(LList): def __init__(self): LList.__init__(self) self._rear = None ...
我们仅需重写的是:头部的插入、尾部的插入、尾部的删除
def prepend(self, elem):
if self._head is None:
self._head = LNode(elem)
self._rear = self._head
else:
self._head = LNode(elem, self._head)
def append(self, elem):
if self._head is None:
self._head = LNode(elem)
self._rear = self._head
else:
self._rear.next = LNode(elem)
self._rear = self._rear.next
def pop_last(self):
if self._head is None:
raise LinkedListUnderflow('in pop_last')
p = self._head
if p.next is None:
e = p.elem
self._head = None
return e
while p.next.next is not None:
p = p.next
e = p.next.elem
self._rear = p
p.next = None
return e
单链表的变体:循环单链表
class LCList:
def __init__(self):
self._rear = None
def prepend(self, elem):
if self._rear is None:
self._rear = LNode(elem)
self._rear.next = self._rear
else:
self._rear.next = LNode(elem, self._rear.next)
def append(self, elem):
self.prepend(elem)
self_rear = self._rear.next
def pop(self):
if self._rear is None:
raise LinkedListUnderflow('in pop')
p = self._rear.next
if p is None:
self._rear = None
else:
self._rear.next = p.next
return p.elem
def printall(self):
if self._rear is None:
raise ...
p = self._rear.next
while True:
print(p.elem)
if p is self._rear:
break
p = p.next
更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 数据结构
# 算法
# 链表
# 单链表、循环链表
# python单向循环链表实例详解
# Python数据结构之循环链表详解
# python实现数据结构中双向循环链表操作的示例
# python/golang实现循环链表的示例代码
# python单向循环链表原理与实现方法示例
# Python双向循环链表实现方法分析
# Python实现的单向循环链表功能示例
# python双向链表实例详解
# Python实现双向链表基本操作
# python双向循环链表实例详解
# 的是
# 仅需
# 为空
# 长度为
# 进阶
# 操作技巧
# 相关内容
# 第二个
# 给大家
# 重写
# 将为
# 更多关于
# 所述
# 程序设计
# 使用技巧
# 面向对象
# 时需
# 编程技巧
相关文章:
如何做静态网页,sublimetext3.0制作静态网页?
如何快速搭建自助建站会员专属系统?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
建站主机与虚拟主机有何区别?如何选择最优方案?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何用y主机助手快速搭建网站?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
,石家庄四十八中学官网?
建站之星好吗?新手能否轻松上手建站?
如何在香港免费服务器上快速搭建网站?
七夕网站制作视频,七夕大促活动怎么报名?
如何快速查询域名建站关键信息?
如何在宝塔面板中修改默认建站目录?
已有域名能否直接搭建网站?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何快速辨别茅台真假?关键步骤解析
建站上传速度慢?如何优化加速网站加载效率?
制作公司内部网站有哪些,内网如何建网站?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
如何自定义建站之星网站的导航菜单样式?
如何选择靠谱的建站公司加盟品牌?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
临沂网站制作公司有哪些,临沂第四中学官网?
电商平台网站制作流程,电商网站如何制作?
制作营销网站公司,淘特是干什么用的?
长沙企业网站制作哪家好,长沙水业集团官方网站?
定制建站流程解析:需求评估与SEO优化功能开发指南
如何选择适合PHP云建站的开源框架?
如何用IIS7快速搭建并优化网站站点?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
网站图片在线制作软件,怎么在图片上做链接?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
建站主机是否等同于虚拟主机?
广德云建站网站建设方案与建站流程优化指南
如何用5美元大硬盘VPS安全高效搭建个人网站?
网站制作企业,网站的banner和导航栏是指什么?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何选择适配移动端的WAP自助建站平台?
如何通过wdcp面板快速创建网站?
上海网站制作开发公司,上海买房比较好的网站有哪些?
如何通过西部建站助手安装IIS服务器?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
h5网站制作工具有哪些,h5页面制作工具有哪些?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
*请认真填写需求信息,我们会在24小时内与您取得联系。