今天终于把大学都没想明白的链表数据结构整明白了,也算小小的收获,挺好玩的。文后附链表操作示意图。

单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。

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数据结构之单链表相关推荐

  1. Python数据结构 四种链表的集合

    python数据结构四个链表的集合 结点的创建 import os# 创建节点 class Node:def __init__(self, data):self.data = dataself.nex ...

  2. Python数据结构学习笔记——链表:无序链表和有序链表

    目录 一.链表 二.无序链表 实现步骤分析 三.无序链表的Python实现代码 四.有序链表 实现步骤分析 五.有序链表的Python实现代码 结语 一.链表 链表中每一个元素都由为两部分构成:一是该 ...

  3. 数据结构:单链表中在P结点前插入S结点

    标题:数据结构:单链表中在P结点前插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点前插入S结点 #include<stdio.h> # ...

  4. 用python 判断一个单链表是否有环

    文章目录 用python 判断一个单链表是否有环. 第二次做DAY20201130 [141. 环形链表](https://leetcode-cn.com/problems/linked-list-c ...

  5. 基本的数据结构:单链表(Singly Linked List)

    一.基本的数据结构:单链表(Singly Linked List) 什么是单链表? 下面是百度百科给出的官方解释: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表 ...

  6. Java数据结构——用单链表编写一个简易通讯录

    Java数据结构--用单链表编写一个简易通讯录 1.定义线性表的抽象数据类型(接口) 2.定义单链表的结点Node类 3.定义数据域中的联系人Person类 4.编写顺序表(类) 5.编写测试程序(m ...

  7. 数据结构之单链表 python实现

    链表是线性表的链式存取的数据结构,是一种链式存取的数据结构,是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点 ...

  8. 数据结构之python实现循环单链表实例

    题目如下: python实现: import random class CLNode:def __init__(self,name):self.name = nameself.next = None ...

  9. CodeSalt | Python数据结构的实现 — 链表

    Python数据结构实现-链表 1. 简单介绍 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Point ...

最新文章

  1. Java设计模式学习06——静态代理与动态代理(转)
  2. 3 weekend110的hadoop中的RPC框架实现机制 + hadoop中的RPC应用实例demo
  3. 算法提高课-数学知识-矩阵乘法-AcWing 1303. 斐波那契前 n 项和:矩阵乘法,快速幂,线性代数
  4. 2014第6周六退火车票
  5. centos7 修改yum源为阿里源
  6. MySQL带参数的存储过程小例子
  7. 深度学习模型压缩方法
  8. tomcat是一个应用服务器
  9. Linux查看端口占用进程
  10. linux 文件夹中过滤文件内容,【shell】对指定文件夹中文件进行过滤,并修改文件内容的shell脚本...
  11. 浅谈游戏《Hollow Knight空洞骑士》
  12. 开源BI框架对比选择 Superset-Redash-Metabase
  13. 2022-2027年中国会议行业市场深度分析及投资战略规划报告
  14. 无密码解锁iPhone
  15. Python+Appium实现京东双十一自动领金币
  16. 中职组网络安全教你如何正确的颁发证书
  17. WPF基础五:UI②内容元素Frame
  18. excel表计算机实践操作,Excel电子表格计算机实践任务书
  19. 【论文阅读】Realtime Robust Malicious Traffic Detection via Frequency DomainAnalysis
  20. Python read打印与print区别

热门文章

  1. google-glog功能介绍
  2. C - char与wchar_t(TCHAR/WCHAR)之间的相互转换
  3. IP多播(计算机网络-网络层)
  4. POJ 3696 神TM数论
  5. 天微TM1650数码管驱动IC新旧版 驱动和注意事项
  6. 新编程语言——微软的“M”语言
  7. 作为IT行业过来人,我有一些话不得不说
  8. iftop相关参数及说明
  9. 苹果消息推送服务教程:第2部分(共2部分)
  10. 致——世界上最幸福的女孩——Chtholly