Python如何创建一个单链表,以及实现单链表的增,删,改,查操作,以及对单链表的排序功能
2020-02-29 19:36
211 查看
标题Python如何创建一个单链表,以及实现单链表的增,删,改,查操作,以及对单链表的排序功能
#功能:
实现单链表的构建和功能操作
#定义单链表的类
class Node: """ 思路:将自定义的类视为节点的生成类,实例对象中 包含数据部分和指向下一个节点的next """ def __init__(self, val, next=None): self.val = val # 有用数据 self.next = next # 循环链接下一个节点关系
#单链表的操作逻辑
class LinkList: """ 思想:单链表类,生成对象可以进行增删改查操作 """ # 创建数据为空的一个链表头 def __init__(self): """ 初始化链表,标记一个链表的开端,以便于获取后续的节点 :param val: """ self.head = Node(None) # 通过list_为链表添加一组节点 def init_list(self, list_): p = self.head # p作为移动变量 for item in list_: p.next = Node(item) p = p.next # 遍历列表 def show(self): p = self.head.next # 第一个有效节点 while p is not None: print(p.val) p = p.next # p向后移动 # 判断链表为空 def is_emply(self): if self.head.next is None: # head后面一个节点没有,判断为空 return True else: return False # 清空链表 def clear_list(self): self.head.next = None # 索引列表(读取指定列表元素) def index_variables(self, index_): p = self.head for item in range(index_ + 1): if p.next == None: # 超出位置最大范围跳出循环,提示错误 raise IndexError("list index out of range") p = p.next return p.val # 尾部插入 def append(self, val): p = self.head while p.next is not None: p = p.next p.next = Node(val) # 头部插入 def head_insert(self, val): node = Node(val) node.next = self.head.next self.head.next = node # 索引插入(指定位置插入) def index_insert(self, index_, val): p = self.head for item in range(index_): if p.next == None: # 超出位置最大范围跳出循环 break p = p.next node = Node(val) node.next = p.next p.next = node # 删除指定数据的节点 def delete_val(self, val): p = self.head # 结束循环必然两个条件其一为假 while p.next and p.next.val != val: p = p.next if p.next is None: print("x not in linklist") else: p.next = p.next.next # 删除指定位置节点 def delete_index(self, index_): p = self.head for item in range(index_): if p.next == None: # 超出位置最大范围跳出循环 break p = p.next if p.next == None: pass # 超出最大位置不删除 else: p.next = p.next.next #有序链表(从小到大)中插入单个节点,保证链表依然有序 def index_val(self,val): p = self.head while p.next!=None and p.next.val<val: p=p.next node = Node(val) node.next = p.next p.next = node #节点数据从小到大排序 def up_list(self): """ 将链表数据从小到大排列 :return: """ p=self.head l_re=LinkList()#新建一个链表,用来从小到大存放节点 while p.next != None: l_re.index_val(p.next.val) # 加第一个 p=p.next# 删第一个 self.head=l_re.head
#测试函数
if __name__=="__main__": """ 测试函数 :return: """ l = LinkList() # 新建一个链表头 l.head.next = Node(1) print(l.head.next.val) print("------------------------") l.init_list([9,7,5,3,1]) # 插入列表 l.append(11) # 尾部插入 l.head_insert(66) # 头部插入 l.index_insert(3, 77) # 指定位置插入 l.index_insert(20, 13) # 超出位置插入最后 l.index_insert(-20, 11) # 插入在开头 l.delete_val(77) # 删除指定数据节点(只删除第一个出现的) l.delete_index(1) # 删除指定位置节点 l.delete_index(-100) # 删除开头元素 l.delete_index(10) # 超出最大位置不删除 l.index_val(4)#有序链表(从小到大)中插入单个节点,保证链表依然有序 l.up_list() #链表 数据节点从小到大排序 l.show()#遍历链表 l.index_variables(0)
- 点赞
- 收藏
- 分享
- 1a285 文章举报
相关文章推荐
- [VB.NET]利用vb.net创建一个完全可编辑的DataGrid,从而实现操作Access数据库进行增,删,改的功能,前提是不用任何其他的Button
- java实现单链表的初始化,创建,删除,插入,查找,排序,同项删除,退出等功能
- 零基础新手的Python入门实战宝典(四) —— 如何实现一个想要的功能?(方法或函数)
- 这是一个关于XML文档的操作管理器XMLHelper类,类中包括XML文档的创建,文档节点和属性的读取,添加,修改,删除的方法功能的实现
- 如何用WebSocket实现一个简单的聊天室以及单聊功能
- 创建接口(接口,提供其他人进行操作的一个入口就是将我们原来实现功能的程序删了写成那个接口让别人来实现功能,为他人提供操作我们这儿的一个入口)
- DHTMLX中对dhtmlxgrid表格行的置顶置底操作,以及拖动排序功能的实现
- 单链表的常用操作,包括单链表的创建、插入、删除、排序、逆置以及打印输出等
- 编程实现一个单链表实现创建、测长以及打印
- 笔试题:创建一个单链表,结点包含学生的学号,姓名,性别,年龄信息.写几个程序,实现按学生学号插入,查询,删除等操作.
- Python如何创建一个模块?以及模块导入
- c语言实现单链表的操作:创建,删除,插入,反转, 排序等
- 用python实现一个不排序的列表功能
- VB的ShowInTaskbar功能分析以及用VC的实现 如何隐藏对话框在工具栏上的按钮
- 《在C#中实现Socket端口复用》 以及《 UDP 一个封锁操作被对 WSACancelBlockingCall 的调用中断。》问题
- 如何在一个已排序的NSArray中搜索某一特定字符串?答案是使用CFArray自带的搜索功能:
- 在c#中如何实现对图象的翻转、放大、缩小操作以及缩微图
- 如何在DataGrid控件中实现编辑、删除、分类以及分页操作
- 如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】