2.7_single_link_list_单链表
节点类
class Node(object):"""节点类"""def __init__(self, item):# item 存放数据self.item = item# next 指向下一个节点的标识self.next = None
单链表
class SingleLinkList(object):"""单链表"""def __init__(self, node=None):self.__head = nodedef add(self, item):"""链表头部添加元素,头插法"""node = Node(item)node.next = self.__headself.__head = nodedef append(self, item):"""链表尾部添加元素,尾插法"""node = Node(item)if self.is_empty():self.__head = nodeelse:cur = self.__headwhile cur.next:cur = cur.nextcur.next = nodedef insert(self, pos, item):"""指定位置添加元素:param pos: 起始从 0 开始:param item: 数据:return:"""if pos <= 0:self.add(item)elif pos > self.length() - 1:self.append(item)else:node = Node(item)pre = self.__headcount = 0# 循环退出后,pre 指向 pos - 1 位置while count < pos - 1:pre = pre.nextcount += 1node.next = pre.nextpre.next = nodedef remove(self, item):"""删除节点"""cur = self.__headpre = Nonewhile cur:if cur.item == item:if cur == self.__head:self.__head = cur.nextelse:pre.next = cur.nextbreakelse:pre = curcur = cur.nextdef search(self, item):"""查找节点是否存在"""cur = self.__headwhile cur:if cur.item == item:return Trueelse:cur = cur.nextreturn Falsedef is_empty(self):"""判断链表是否为空"""return self.__head is Nonedef length(self):"""链表长度"""# cur 指针,用来移动遍历节点cur = self.__head# count 记录节点数量count = 0while cur is not None:count += 1cur = cur.nextreturn countdef travel(self):"""遍历整个链表"""cur = self.__headwhile cur:print(cur.item, end=' ')cur = cur.nextprint('')
测试代码:
if __name__ == '__main__':# --- testing: is_empty() / length() ---ll = SingleLinkList()print(ll.is_empty())print(ll.length())ll.append(1)print(ll.is_empty())print(ll.length())# --- testing: add() / append() / travel() ---ll.add(8)ll.append(2)ll.append(3)ll.append(4)ll.append(5)ll.append(6)ll.travel() # 8 1 2 3 4 5 6# --- testing: insert() ---ll.insert(-1, 9) # 9 8 1 2 3 4 5 6ll.travel()ll.insert(3, 100) # 9 8 1 100 2 3 4 5 6ll.travel()ll.insert(10, 200) # 9 8 1 100 2 3 4 5 6 200ll.travel()# --- testing: remove() ---ll.remove(100)ll.travel() # 9 8 1 2 3 4 5 6 200ll.remove(9)ll.travel() # 8 1 2 3 4 5 6 200ll.remove(200)ll.travel() # 8 1 2 3 4 5 6
2.7_single_link_list_单链表相关推荐
- Go 学习笔记(80)— Go 标准库 container/list(单链表、双链表)
列表是一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此之间的关系.列表有多种实现方法,如单链表.双链表等. 在 Go 语言中,将列表使用 container/list 包来实现,内部 ...
- 数据结构(08)— 线性单链表基本操作
1. 线性单链表数据结构 // 假定每个结点的类型用 SNode 表示 typedef struct SNodeTag {int data; // 所存储的数据元素SNodeTag *next; // ...
- 数据结构(05)— 线性单链表实战
1. 设计思路 本项目的实质是完成对考生信息的建立.查找.插入.修改.删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结 ...
- 带头节点单链表的增删改查
单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...
- 数据结构--单链表(数组)
文章目录 单链表 单链表 用数组实现的单链表可以在任意位置插入.删除.替换一个数,相比于用结构体和指针实现的动态链表而言,数组模拟链表运行的速度非常快,动态链表基本会出现超时的现象.但缺点是浪费内存 ...
- 数据结构和算法:(3)3.2.2单链表的整表删除
我们不使用这个单链表时,我们需要把他在内存中释放掉,以便于流出空间给其他程序和软件使用. 单链表整表删除的算法思路如下: 声明结点p和q: 将第一个结点赋值给p,下一个结点(也就是第一个结点的下一个结 ...
- 数据结构和算法:(3)3.2.1单链表的整表创建
对于顺序存储结构的线性表的整表创建,我们可以用数组的初始化来直观理解.(因为之前说过我们线性表的顺序存储结构呢事实上也就是在数组的基础上加多一个变量来存储当前线性表的长度构成的一个结构,所以我们用数组 ...
- 数据结构与算法(2-2)线性表之链式存储(单链表、静态链表、循环链表、双向循环链表)
目录 一.单链表 1.存储方式 2.插入 3.删除 总代码: 二.静态链表 1.存储方式 2.插入 3.删除 4.遍历 总代码: 三.循环链表 总代码: 四.双向循环链表 1.存储方式: 2.插入和删 ...
- 删除单链表中的重复节点(c语言版本)
这是一道经典的面试题,下面是我的研究和举一反三,特整理如下: 分为三种情形: (1)删除有序链表的重复节点,重复节点一个都不留 (2)删除有序链表的重复节点,重复节点只留一个 (3)删除无序链表的重复 ...
最新文章
- 自由的胜利:多元化智能平台BCH
- CCNP交换实验(3) -- STP
- Pyqt5_QWidget
- crashdumpandroid_Android 中Crash时如何获取异常信息详解及实例
- 单例设计模式-Enum枚举单例、原理源码解析以及反编译实战
- S/4HANA key user tool创建的Extension field,点了publish后的执行原理
- 牛客题霸题目及题解汇总
- sql 账号查询一个表勾选那个权限_Spring Cloud微服务架构中的数据权限DataPermision实现方案...
- 关于MyBatis的缓存
- 【机器学习笔记之六】Bagging 简述
- 手把手教你学习ROR-5.Validation
- OpenTSDB的读写API
- c语言dll导出函数举例,DLL中导出函数的两种方式(dllexport与.def文件)
- 《西瓜书》第六章 公式6.6 凸二次规划问题
- 安卓代码获取系统属性值
- 新ssd硬盘怎么安装efi_如何在PC中升级和安装新的硬盘驱动器或SSD
- ico付费图标下载器 附带易语言源码
- svn 服务器ip地址变更
- LeetCode-----第113题-----路径总和 II
- python对网站DDos攻击