数据结构之链表
python实现链表的实现以及增删改查
一、链表简介
链表是一种在存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针链接次序实现。链表是由一系列的结点组成,结点可以在运行时动态生成。每个结点包含两部分:数据域与指针域。数据域存储数据元素,指针域存储下一结点的指针
二、单向链表
单向链表也叫单链表,是链表中最简单的形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
单向链表结构
head 保存首地址,item 存储数据,next 指向下一结点地址。
链表失去了序列的随机读取优点,同时链表增加了指针域,空间开销也较大,但它对存储空间的使用要相对灵活。
列如:有一堆数据[1,2,3,5,6,7],要在3和5之间插入4, 如果用数组,需要将5之后的数据都往后退一位,然后再插入4,这样非常麻烦,但是如果用链表,我就直接在3和5之间插入4就行。
三 python实现链表的方式
import pdb class Node(object): """链表节点""" def __init__(self, item): self.item = item self.next = None class SingleLinkList(object): """单链表类""" def __init__(self): self._head = None # 判断链表是否为空 def is_empty(self): return self._head is None # 统计链表长度 def length(self): cur = self._head count = 0 while cur is not None : count += 1 cur = cur.next return count # 遍历链表 def items(self): cur = self._head while cur is not None: yield cur.item 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, index, item): node = Node(item) length = self.length() if length <= 0: self._head = node elif index > length : self.append(item) else: cur = self._head for i in range(1,index): cur = cur.next node.next = cur.next cur.next = node # 删除链表中的指定元素 def remove(self, item): cur = self._head pre = None while cur is not None: if cur.item == item: if not pre: self._head = cur.next else: pre.next = cur.next return else: pre = cur cur = cur.next # 判断元素是否在链表中 def find(self,item): return item in self.items() if __name__ == '__main__': # pdb.set_trace() linkobj = SingleLinkList() for i in range(10): linkobj.append(i) # for node in range(10): # print(node) # linkobj.insert(10,11) #print(list(linkobj.items())) res = linkobj.remove(5) print(list(linkobj.items()))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义