本文实例讲述了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双向循环链表实例详解
# 的是
# 仅需
# 为空
# 长度为
# 进阶
# 操作技巧
# 相关内容
# 第二个
# 给大家
# 重写
# 将为
# 更多关于
# 所述
# 程序设计
# 使用技巧
# 面向对象
# 时需
# 编程技巧
相关文章:
C#如何序列化对象为XML XmlSerializer用法
如何做网站制作流程,*游戏网站怎么搭建?
如何在西部数码注册域名并快速搭建网站?
如何在腾讯云服务器快速搭建个人网站?
linux top下的 minerd 木马清除方法
如何快速重置建站主机并恢复默认配置?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
高端网站建设与定制开发一站式解决方案 中企动力
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
如何高效生成建站之星成品网站源码?
中山网站制作网页,中山新生登记系统登记流程?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
制作宣传网站的软件,小红书可以宣传网站吗?
h5在线制作网站电脑版下载,h5网页制作软件?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
长沙做网站要多少钱,长沙国安网络怎么样?
表情包在线制作网站免费,表情包怎么弄?
如何访问已购建站主机并解决登录问题?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何实现建站之星域名转发设置?
如何在宝塔面板创建新站点?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
c# 在高并发场景下,委托和接口调用的性能对比
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
企业微网站怎么做,公司网站和公众号有什么区别?
,sp开头的版面叫什么?
宝塔建站无法访问?如何排查配置与端口问题?
如何用腾讯建站主机快速创建免费网站?
平台云上自助建站如何快速打造专业网站?
教程网站设计制作软件,怎么创建自己的一个网站?
如何用wdcp快速搭建高效网站?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
公司网站设计制作厂家,怎么创建自己的一个网站?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
网站制作免费,什么网站能看正片电影?
如何在建站宝盒中设置产品搜索功能?
浅析上传头像示例及其注意事项
建站之星各版本价格是多少?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何通过cPanel快速搭建网站?
如何在Windows服务器上快速搭建网站?
建站之星展会模版如何一键下载生成?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
建站主机如何选?性能与价格怎样平衡?
建站之星×万网:智能建站系统+自助建站平台一键生成
制作网站的公司有哪些,做一个公司网站要多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。