python 单向链表
1 # -*- coding: utf-8 -*- 2 # @author: Tele 3 # @Time : 2019/04/22 下午 3:17 4 # 单向链表的实现 5 # 每个节点包含两部分,数据区和指向下个节点的链接 6 # 单向列表:每个节点包含两部分:数据区与链接区(指向下一个节点),最后一个元素的链接区为None 7 # 单向列表只要找到头节点,就可以访问全部节点 8 class SingleNode: 9 def __init__(self, data, next=None): 10 self.data = data 11 # next指向下一个节点而不是数据 12 self.next = next 13 14 15 # 使用链表时只需要传入待存储的数据而不是节点 16 class SingleLinkedList: 17 def __init__(self, data=None): 18 node = SingleNode(data) 19 self.__head = node if node.data else None 20 21 def is_empty(self): 22 return self.__head == None 23 24 def length(self): 25 count = 0 26 cur = self.__head 27 while cur: 28 count += 1 29 cur = cur.next 30 return count 31 32 # 头部添加元素 33 def add(self, data): 34 node = SingleNode(data) 35 node.next = self.__head 36 self.__head = node 37 38 # 尾部添加元素 39 def append(self, data): 40 node = SingleNode(data) 41 if self.is_empty(): 42 self.__head = node 43 else: 44 cur = self.__head 45 # 最后一个节点的next为None 46 while cur.next: 47 cur = cur.next 48 cur.next = node 49 50 # 指定位置插入 51 def insert(self, pos, data): 52 node = SingleNode(data) 53 cur = self.__head 54 count = 0 55 if self.length() >= pos >= 0: 56 while cur: 57 if count + 1 == pos: 58 node.next = cur.next 59 cur.next = node 60 break 61 # pos为0 62 elif count == pos: 63 self.add(data) 64 break 65 count += 1 66 cur = cur.next 67 elif pos < 0: 68 self.add(data) 69 else: 70 self.append(data) 71 # 如果列表中插入时没有元素 72 if not self.__head: 73 self.append(data) 74 75 # 遍历 76 def travel(self): 77 cur = self.__head 78 while cur: 79 print(cur.data) 80 cur = cur.next 81 82 # 移除出现的第一个元素 83 def remove(self, data): 84 if self.is_empty(): 85 return 86 node = self.__find(data) 87 cur = self.__head 88 while cur: 89 # 如果要移除的元素是头节点 90 if cur.data == node.data: 91 self.__head = cur.next 92 break 93 elif cur.next.data == node.data: 94 cur.next = node.next 95 break 96 cur = cur.next 97 98 # 私有方法,用于查找节点 99 def __find(self, data): 100 cur = self.__head 101 node = SingleNode(data) 102 while cur: 103 if cur.data == data: 104 node.next = cur.next 105 break 106 cur = cur.next 107 return node 108 109 # 查找,找不到返回-1,找到则返回索引 110 def search(self, data): 111 index = -1 112 cur = self.__head 113 count = 0 114 while cur: 115 if cur.data == data: 116 index = count 117 break 118 count += 1 119 cur = cur.next 120 return index 121 122 123 def main(): 124 ssl = SingleLinkedList() 125 print(ssl.is_empty()) 126 print(ssl.length()) 127 # ssl.append(1) 128 # ssl.append(100) 129 # ssl.append(2) 130 # ssl.append(200) 131 # ssl.append(3) 132 # ssl.append(4) 133 print(ssl.is_empty()) 134 print(ssl.length()) 135 136 # 遍历 137 print("*" * 50) 138 # ssl.travel() 139 140 ssl.add(100) 141 # ssl.travel() 142 # 为负数时作为头节点 143 ssl.insert(-1, "sss") 144 ssl.travel() 145 print("*" * 50) 146 print(ssl.search("sss")) # 0 147 print("*" * 50) 148 ssl.remove(100) 149 ssl.travel() 150 151 152 if __name__ == '__main__': 153 main()
转载于:https://www.cnblogs.com/tele-share/p/10756418.html
python 单向链表相关推荐
- node 获取表单数据 为空_数据结构与算法(python)单向链表篇
链表 数据表的构建需要预先知道数据的大小来申请连续的存储空间, 而在进行扩充的时候又需要进行数据的搬迁, 使用起来不是很灵活. 链表结构可以充分利用计算机内存空间, 实现灵活的内存动态管理. 简单来说 ...
- python单向链表和双向链表的图示代码说明
图示说明: 单向链表: insert. remove. update.pop方法 class Node:def __init__(self, data):self.data = dataself.ne ...
- python单向链表
入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删. 目录 一.单向链表概念 二.建立节点对象 三.链表对象的初始定义 四.判断链表是否为空 五.获 ...
- python单向链表逆序_链表逆序-Python实现
题目描述: 给定一个带头节点的单链表,将其逆序.即如果单链表原来为head->1->2->3->4->5->6->7,那么逆序后变为head->7-&g ...
- python单链表类_python 链表类
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 一般我们都构造双向循环链表. 二 python单向链表实现1 单项链表实现app ...
- python数据结构与算法:单向链表
单链表:python实现及其对应的 增删查检 操作 ##################### P4.1-P4.8 单向链表 ########################### #coding:u ...
- python之链表、单链表、双向链表、单向循环链表
python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...
- 用Python实现单向链表
单向链表 单向链表也叫单链表,是链表中最简单的⼀种形式,它的每个节点包含两个域,⼀个信息域(元素域)和⼀个链接域.这个链接指向链表中的下⼀个节点,⽽最后⼀个节点的链接域则指向⼀个空值. 表元素域ele ...
- python 判断div 之间的内容是否为空_python实现单向链表数据结构及其基本方法
顺序表和链表作为线性表的典型结构,上一篇已经说了顺序表在python中的典型应用:list和tuple,<顺序表数据结构在python中的应用>,今天来实现链表的基本结构之一:单向链表. ...
最新文章
- Tensorflow-gpu 在Anaconda中使用出现问题的解决方式
- Python-OpenCV 处理图像(三):图像像素点操作
- [css] css的加载会阻塞DOM树解析和渲染吗?为什么
- 路径匹配C++变量文件夹下所有文件
- Whitted光线追踪实现
- linux之我常用的20条命令(之二)
- 快速部署简单私有云CloudStack(下)
- WEB应用程序的开发和研究
- 什么是游戏引擎,什么是虚幻引擎(Unreal Engin 4)?
- 票据纸张尺寸对照表_纸张小科普 | 白卡纸
- gwas snp 和_GWAS笔记SNP过滤
- java邮箱实现忘记修改密码
- OpenHarmony2.0 一站式编译烧录Hi3516标准系统
- 简述php语言的特点是_PHP语言有哪些特征和优势?
- 2020秋季甲级PAT 7-4 Professional Ability Test (30 分)
- 相机标定-opencv单应性矩阵实现平面坐标标定(kinect v1)
- 集群和分布式的区别,软件架构的演化过程,Apache Dubbo详解
- 『Halcon与C#混合编程』010_相机实时采集并显示(或循环显示)
- web浏览器兼容性问题
- C++ QT开发人机象棋(搜索算法)
热门文章
- lintcode 734. 形式为a^i b^j c^k的子序列数量 题解
- 如何查看windows xp系统的位数?
- CentOS下搭建使用gitlab 和tortoiseGit使用
- Redis之key的淘汰策略
- LogManager分析
- (24)System Verilog多个线程间通信(信箱)
- (36)System Verilog类中方法示例
- (18)Zynq FPGA 看门狗定时器介绍
- System verilog随机系统函数$randomize使用方法
- fft 相位谱_基于级联FFT的广义互相关算法在声源定位中的应用