python数据结构之单链表
今天终于把大学都没想明白的链表数据结构整明白了,也算小小的收获,挺好玩的。文后附链表操作示意图。
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
isempty(self) 链表是否为空
length(self) 链表长度
travel(self) 遍历整个链表
add(self,item) 链表头部添加元素
append(self,item) 链表尾部添加元素
insert(self,item,index) 指定位置添加元素
deletebyitem(self,item) 根据数据项删除节点
deletebyindex(self,index) 根据索引位置删除节点
search(self,item) 根据数据项查找节点是否存在
update(self,index,item) 暂无实现
getitem(self,index) 获取索引位置对应的数据项
getindex(self,item) 获取数据项对应的索引位置
代码基本为原创,经过大量重写
class Node(object):def __init__(self, item):self.item = itemself.next = Nonedef __repr__(self):passdef __str__(self):return str(self.item)class SingleLinkList(object):def __init__(self):self.header = Noneself.currentnum=0def isempty(self):return self.header == Nonedef length(self):return self.currentnumdef travel(self):cur =self.headerwhile cur !=None:print("{}".format(cur.item),end=" ")cur=cur.nextprint("\r")def add(self,item):node=Node(item)# 新节点的链接指向头节点node.next=self.header# 链表的头指向新节点self.header=nodeself.currentnum+=1def append(self,item):tempnode=self.headernode=Node(item)if self.isempty():self.add(node)else:while tempnode.next!=None:tempnode=tempnode.nexttempnode.next=nodeself.currentnum+=1def insert(self,item,index):node=Node(item)tempnode=self.headerif index>self.currentnum+1 or index<=0:raise IndexError("{} is not find in Linklist".format(index))# 指定位置为第一个即在头部插入if index==1:self.add(node)elif index>self.currentnum-1:self.append(node)else:for i in range(1,index-1):tempnode=tempnode.nextnode.next=tempnode.nexttempnode.next=nodeself.currentnum+=1def deletebyitem(self,item):tempnode=self.headerprenode=Nonewhile tempnode!=None:if tempnode.item==item:if tempnode==self.header:self.header=tempnode.nextelse:prenode.next=tempnode.nextbreakelse:prenode=tempnodetempnode=tempnode.nextdef deletebyindex(self,index):if index>self.currentnum or index<=0:raise IndexError("{} is not find in Linklist".format(index))i=1tempnode=self.headerprenode=self.headerif index==1:self.header = tempnode.nextself.currentnum-=1returnwhile tempnode.next and i<index:prenode = tempnodetempnode = tempnode.nexti+=1if i==index:prenode.next=tempnode.nextself.currentnum-=1def search(self,item):tempnode=self.headerwhile tempnode!=None:if tempnode.item==item:return Trueelse:tempnode=tempnode.nextreturn Falsedef update(self,index,item):passdef getitem(self,index):if index<=0 or index>self.currentnum:raise IndexError("{} is not find in Linklist".format(index))tempnode=self.headeri=1while i<index:tempnode=tempnode.nexti+=1return tempnode.itemdef getindex(self,item):tempnode = self.headeri=0flag=Falsewhile tempnode != None:i+=1if tempnode.item == item:flag=Truereturn ielse:tempnode = tempnode.nextif flag==False:return 0if __name__ == '__main__':a = SingleLinkList()a.add(1) # 1print('a.add(1)')a.travel()a.add(2) # 2 1print('a.add(2)')a.travel()a.append(3) # 2 1 3print('a.append(3)')a.travel()a.insert(4, 2) # 2 1 4 3print('a.insert(2, 4)')a.travel()print('a.search(1)=',a.search(1))print('a.search(5)=', a.search(5))print('a.getindex(1)=',a.getindex(1))print('a.getindex(5)=', a.getindex(5))print('a.getitem(2)=', a.getitem(2))print('a.getitem(4)=', a.getitem(4))print('a.getitem(3)=', a.getitem(3))# a.deletebyitem(5)# print('a.deletebyitem(5)')# a.travel()# a.deletebyitem(4)# print('a.deletebyitem(4)')# a.travel()# a.deletebyitem(2)# print('a.deletebyitem(2)')# a.travel()a.deletebyindex(4)print('a.deletebyindex(4)')a.travel()a.deletebyindex(2)print('a.deletebyindex(2)')a.travel()a.deletebyindex(1)print('a.deletebyindex(1)')a.travel()
结果如下
C:\python\pyproject\pythonalgorithms\venv\Scripts\python.exe C:/python/pyproject/pythonalgorithms/linklist.py
a.add(1)
1
a.add(2)
2 1
a.append(3)
2 1 3
a.insert(2, 4)
2 4 1 3
a.search(1)= True
a.search(5)= False
a.getindex(1)= 3
a.getindex(5)= 0
a.getitem(2)= 4
a.getitem(4)= 3
a.getitem(3)= 1
a.deletebyindex(4)
2 4 1
a.deletebyindex(2)
2 1
a.deletebyindex(1)
1 Process finished with exit code 0
链表头部增加节点示意图
从链表尾部增加节点示意图
python数据结构之单链表相关推荐
- Python数据结构 四种链表的集合
python数据结构四个链表的集合 结点的创建 import os# 创建节点 class Node:def __init__(self, data):self.data = dataself.nex ...
- Python数据结构学习笔记——链表:无序链表和有序链表
目录 一.链表 二.无序链表 实现步骤分析 三.无序链表的Python实现代码 四.有序链表 实现步骤分析 五.有序链表的Python实现代码 结语 一.链表 链表中每一个元素都由为两部分构成:一是该 ...
- 数据结构:单链表中在P结点前插入S结点
标题:数据结构:单链表中在P结点前插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点前插入S结点 #include<stdio.h> # ...
- 用python 判断一个单链表是否有环
文章目录 用python 判断一个单链表是否有环. 第二次做DAY20201130 [141. 环形链表](https://leetcode-cn.com/problems/linked-list-c ...
- 基本的数据结构:单链表(Singly Linked List)
一.基本的数据结构:单链表(Singly Linked List) 什么是单链表? 下面是百度百科给出的官方解释: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表 ...
- Java数据结构——用单链表编写一个简易通讯录
Java数据结构--用单链表编写一个简易通讯录 1.定义线性表的抽象数据类型(接口) 2.定义单链表的结点Node类 3.定义数据域中的联系人Person类 4.编写顺序表(类) 5.编写测试程序(m ...
- 数据结构之单链表 python实现
链表是线性表的链式存取的数据结构,是一种链式存取的数据结构,是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点 ...
- 数据结构之python实现循环单链表实例
题目如下: python实现: import random class CLNode:def __init__(self,name):self.name = nameself.next = None ...
- CodeSalt | Python数据结构的实现 — 链表
Python数据结构实现-链表 1. 简单介绍 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Point ...
最新文章
- Java设计模式学习06——静态代理与动态代理(转)
- 3 weekend110的hadoop中的RPC框架实现机制 + hadoop中的RPC应用实例demo
- 算法提高课-数学知识-矩阵乘法-AcWing 1303. 斐波那契前 n 项和:矩阵乘法,快速幂,线性代数
- 2014第6周六退火车票
- centos7 修改yum源为阿里源
- MySQL带参数的存储过程小例子
- 深度学习模型压缩方法
- tomcat是一个应用服务器
- Linux查看端口占用进程
- linux 文件夹中过滤文件内容,【shell】对指定文件夹中文件进行过滤,并修改文件内容的shell脚本...
- 浅谈游戏《Hollow Knight空洞骑士》
- 开源BI框架对比选择 Superset-Redash-Metabase
- 2022-2027年中国会议行业市场深度分析及投资战略规划报告
- 无密码解锁iPhone
- Python+Appium实现京东双十一自动领金币
- 中职组网络安全教你如何正确的颁发证书
- WPF基础五:UI②内容元素Frame
- excel表计算机实践操作,Excel电子表格计算机实践任务书
- 【论文阅读】Realtime Robust Malicious Traffic Detection via Frequency DomainAnalysis
- Python read打印与print区别