python实现单链表与双向链表
首先看单链表class Chain():
def __init__(self):self.first = Noneself.length = 0def is_empty(self):"""是否为空"""return self.first == Nonedef add(self, val):"""头部添加"""node = Node(val)temp = self.firstnode.next = tempself.first = nodeself.length += 1def append(self, val):"""尾部添加"""node = Node(val)if self.first:temp = self.firstmid = Nonewhile temp:mid = temptemp = temp.nextmid.next = nodeelse:self.first = nodeself.length += 1def __setitem__(self, item, val):"""插入元素"""node = Node(val)temp, index = self.first, 0if item == 0:node.next, self.first = self.first, nodeself.length += 1else:while temp:if index+1 == item:node.next, temp.next = temp.next, nodeself.length += 1breakindex += 1temp = temp.nextdef __len__(self):"""链表长度"""return self.length@propertydef len_2(self):"""链表长度(时间复杂度O(n))"""if not self.first:return 0else:temp = self.firstlength = 1while temp.next:length += 1temp = temp.nextreturn lengthdef pop(self):"""删除尾部元素(有错误)"""temp = self.firstmid = Nonewhile temp.next:mid, temp = temp, temp.nextif mid:mid.next = Noneself.length -= 1def __delitem__(self, item):"""删除某一位置元素"""temp, index = self.first, 0if item == 0:if self.first:self.first = self.first.nextself.length -= 1while temp:if index + 1 == item:temp.next = temp.next.nextself.length -= 1index += 1temp = temp.nextdef bianli(self):"""遍历链表"""temp = self.firstwhile temp:print(temp.value)temp = temp.nextdef reverse1(self):"""反转链表""" temp = self.first prev = None while temp: temp_next = temp.next temp.next = prev prev = temp temp = temp_next self.first = prevdef reverse2(self):"""反转链表""" chain_list = []temp = self.firstwhile temp:chain_list.append(temp.value)temp = temp.nexttemp = self.firstwhile temp:temp.val = chain_list.pop()temp = temp.nextdef __iter__(self):passdef __next__(self):pass
class Node():def __init__(self, val):self.value = valself.next = None
在来看双向链表
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Node():def __init__(self, val):self.value = valself.prev = Noneself.next = None
class Chain():def __init__(self):self.first = Nonedef is_empty(self):"""是否为空"""return self.first == Nonedef add(self, val):"""头部添加"""node = Node(val)self.first.prev = nodetemp = self.firstnode.next = tempself.first = nodedef append(self, val):"""尾部添加"""node = Node(val)temp = self.firstif not temp:self.first = nodeelse:while temp.next:temp = temp.nextnode.prev = temptemp.next = nodedef __delitem__(self, item):"""删除元素"""temp, index = self.first, 0while temp:if index == item:if temp.next:temp.next.prev, temp.prev.next = temp.prev, temp.nextelse:temp.prev.next = Noneindex += 1temp = temp.nextdef travel(self):temp = self.firstwhile temp:print(temp.value)temp = temp.next
python实现单链表与双向链表相关推荐
- python之链表、单链表、双向链表、单向循环链表
python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...
- 「数据结构 | 链表」单链表、双向链表节点操作演示动画
目录 1. 什么是链表 2. 链表数据结构 2.1 单链表数据结构(Java) 2.2 双向链表数据结构(Java) 3. 单链表操作动画 3.1 新增节点 3.2 删除节点 4. 双向链表操作动画 ...
- 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)
一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...
- 线性表详解(静态链表、单链表、双向链表、循环链表)
目录 申明 1. 线性表的定义 2. 线性表的抽象数据类型 3. 线性表的顺序存储结构 3. 1 顺序存储定义 3. 2 顺序存储方式 3. 3 数据长度与线性表长度区别 3. 4 地址计算方法 4. ...
- python实现单链表快速排序升序linkedqueue_同时对多个数组进行排序
关于 同时对多个数组进行排序的搜索结果 回答 本人学习数据结构时看到的不错的总结,共享一下了 文件有一组记录组成,记录有若干数据项组成,唯一标识记录的数据项称关键字; 排序是将文件按关键字的递增(减) ...
- 栈,队列,单链表,双向链表
1. 定义头文件 实现栈方法的定义,注意这里用到了全局的静态数组,可以通过这种方式保护数据. main.c,实现存储 队列,创建头文件queue.h 创建queue.c 实现main函数 单链表 在定 ...
- 2.3.3单链表的双向链表
2.3.3双向链表 插入.删除 指在前驱和后驱方向都能游历(遍历)的线性链表 双向链表的每个结点有两个指针域 [结构]:prior data next 双链表通常采用带头结点的循环链表形式 可理解为首 ...
- 数据结构:单链表和双向链表
1.链表 链表是有序的列表,但是它在内存中是存储如下 小结: 链表是以节点的方,来存储是链式存储 每个节点包含data域,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续存储 链表分带 ...
- python求单链表的长度_709. 设计链表(Python)
题目 难度:★★☆☆☆ 类型:链表,设计题 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针 ...
最新文章
- python 用户认证_python基于mysql的用户认证
- 1月12日,HTML学习笔记2
- Java接口多线程并发测试 (一)
- [云炬python3玩转机器学习]5-2最小二乘法a和b推导
- Distributed Systems笔记-Cryptographic Protocols
- 我的Java教程,不断整理,反复学习,记录着那些年大学奋斗的青春
- MongoDB(课时30 $group)
- 连续性的设计——改善产品的体验
- [转载] OpenCV-Python图像位与运算bitwise_and函数详解
- 【引向】全栈开发工程师之路
- Java UDP通信详解:单播、广播、组播
- C#试玩程序设计试题——定向越野(迷宫)
- 墨者学院—网络安全篇3
- 互联网日报 | 张朝阳宣布2020年搜狐已盈利;永辉超市达成千店目标;腾讯云原生注册用户规模超100万...
- OpenCV源码剖析之imread PNG
- 玩游戏计算机缺失msvcp140,绝地求生计算机丢失MSVCP140.dll解决办法
- 5.larval 验证规则
- 【转载】CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数)...
- S4HANA 2020输入会计凭证提示需要输入税码的配置
- 【国产MCU移植】移植RT-Thread到国产芯片HC32L196