python单向链表如何实现
- 更新时间:2021-07-10 08:12:04
- 编辑:易炎彬
为找教程的网友们整理了相关的编程文章,网友养馨香根据主题投稿了本篇教程内容,涉及到Python相关内容,已被498网友关注,下面的电子资料对本篇知识点有更加详尽的解释。
参考资料
- Python与量化投资:从基础到实战 PDF 电子书 / 248.2 MB / 王小川 推荐度:
- 《Python极客项目编程》配套资源 配套资源 / 18.83 MB / [美] Mahesh Venkitach 推荐度:
- 《树莓派Python编程入门与实战(第2版)》配套资源 配套资源 / 34.31 KB / 勃鲁姆,布莱斯纳罕 推荐度:
- Selenium 2自动化测试实战:基于Python语言 PDF 电子书 / 44 MB / 虫师 推荐度:
- Python新手使用Django架站的16堂课 PDF 电子书 / 199.5 MB / 何敏煌 推荐度:
正文内容
给学习python的读者整理一篇《python单向链表如何实现》优秀文章,觉得应该跟大家分享,把代码做了调试发布出来,为了方便大家的阅读。
1、说明
单向链接表(单链表):每个节点包括两个域、一个信息域(元素域)和一个连接域,该链接指向链接表的下一个节点,最后一个节点的链接指向空值。
表要素elem用于存储具体数据。
链接域next用于存管下一个节点的位置(python中的标志)
变量P指向链表头节点(首节点)的位置,可以从P出发找到表中的任意节点。
2、实例
class Node(object): def __init__(self, elem): """ :param elem: 表元素域 next:下一结点链接域 cursor(cur):游标 """ self.elem = elem # 定义next指向空 self.next = None class SingleLinkList(object): """ 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一一个节点,而最后-个节点的链接域则指向一个空值。 表元素域elem用来存放具体的数据。 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。 """ def __init__(self, node=None): self.__head = node # node.elem node.next def is_empty(self): """链表是否为空 """ return self.__head is None def length(self): """链表长度""" # cur游标,用来移动遍历节点 cur = self.__head count = 0 while cur is not None: count += 1 cur = cur.next # count 记录数量 return count def travel(self): """遍历整个链表""" cur = self.__head while cur is not None: print(cur.elem, end=' ') cur = cur.next def add(self, item): """链表头部添加元素:头插法""" node = Node(item) node.next = self.__head self.__head = node def append(self, item): """链表尾部添加元素:尾插法""" node = Node(item) # 下一结点链接域不为空 if self.is_empty(): self.__head = node else: cur = self.__head while cur.next is not None: cur = cur.next cur.next = node def insert(self, pos, item): """ pos: pos从0开始 pre:指定节点前一节点,相当于游标 node:插入的指定节点 指定位置添加元素 """ # if pos<=0 头插法 if pos <= 0: self.add(item) # elif pos>(self.length()-1) 尾插法 elif pos > (self.length() - 1): self.append(item) # else 插入法 else: pre = self.__head count = 0 # 当循环退出后,pre指向pos-1 while count < (pos - 1): count += 1 pre = pre.next node = Node(item) node.next = pre.next pre.next = node def remove(self, item): """删除元素""" # 考虑删除头部、尾部、中间节点 cur = self.__head pre = None while cur is not None: if cur.elem == item: # 先判断是否是头节点 if cur == self.__head: self.__head = cur.next else: pre.next = cur.next break else: pre = cur cur = cur.next def search(self, item): """查找节点是否存在""" # 1. 创建游标 cur = self.__head # 2. 遍历游标 while cur is not None: # 3. cur.elem = item if cur.elem == item: return True else: cur = cur.next return False if __name__ == '__main__': ll = SingleLinkList() ll.is_empty() l1 = ll.length() print(l1) ll.append(55) ll.is_empty() l2 = ll.length() print(l2) ll.append(2) ll.add(8) ll.append(3) ll.append(4) ll.append(5) # 55 1 8 2 3 4 ll.insert(-1, 9) # 9 8 55 2 1 8 2345 ll.insert(2, 100) # 9 8 100 55 2 1 8 2345 ll.travel()
以上就是python单向链表的实现,希望对大家有所帮助。
相关教程
-
删除python pandas.DataFrame 的多重index实例
今天小编就为大家分享一篇删除python pandas.DataFrame 的多重index实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
发布时间:2019-08-26
-
python 包之 Pillow 图像处理教程分享
这篇文章主要介绍了python 包之 Pillow 图像处理教程分享,文章基于Python的相关资料展开主题相关内容,需要的小伙伴可以参考一下
发布时间:2019-07-23