数据结构代码

文章目录

  • 线性表的插入
  • 线性表的删除
  • 单链表的建立
  • 栈的顺序存储
  • 队列的顺序存储
  • 串的顺序存储
  • 树的存储
  • 二叉树遍历
    • 前序遍历
    • 中序遍历
    • 后序遍历
  • 二分法插入排序
  • 利用普里姆算法构造最小生成树

线性表的插入

#a: 列表,pos: 要插入的位置,key: 要插入的数据,n: 列表中已有数据长度
def insert(a, pos, key, n):i = n - 1while i >= pos:a[i + 1] = a[i]i -= 1a[pos] = keyreturn n + 1if __name__ == '__main__':a = [None] * 10n = int(input("请输入有效数据个数n:"))for i in range(0, n):print(f"请输入第{i + 1}数据给列表a:", end=' ')num = int(input())a[i] = numprint("插入前列表为:")print(a[:n])pos = int(input("请输入要插入的位置:"))key = int(input("请输入要插入的数据:"))listlen = insert(a, pos, key, n)print("插入后列表为")print(a[:listlen])

线性表的删除

#a: 列表,pos: 要删除的位置,n: 列表中已有数据长度
def dellist(a, pos, n):i = poswhile i < n - 1:a[i] = a[i + 1]i += 1return n - 1if __name__ == '__main__':a = [None] * 10n = int(input("请输入有效数据个数n:"))for i in range(0, n):print(f"请输入第{i + 1}数据给列表a:", end=' ')num = int(input())a[i] = numprint("插入前列表为:")print(a[:n])pos = int(input("请输入要删除的位置:"))listlen = dellist(a, pos, n)print("删除后列表为")print(a[:listlen])

单链表的建立

#建立数据节点类
class Node(object):def __init__(self, data):self.data = self.dataself.next = None#创建单链表类
class SLinkList:def __init__(self):self.head = Noneself.length = 0#判断是否为空def is_empty(self):if self.head == None:return Truereturn False在链表头部插入数据def add(self, p):if self.is_empty():self.head = pp.next = self.headself.head = pself.length += 1#在链表尾部插入数据def appendnode(self, p):q = self.headif self.is_empty():self.add(p)else:while (q.next != None):q = q.nextq.next = pself.length += 1#输出链表当前链接节点数据的状态def travel(self):q = self.headif self.length == 0:print("目前链表没有数据!")else:print("目前链表里面的元素有:", end=' ')for i in range(self.length):print("%s->" % q.data, end=' ')q = q.nextprint("\n")def main():s = SLinkList()print("""0、结束所有操作1、从尾部插入数据建立单链表2、从头部插入数据建立单链表""")while True:number = eval(input("请输入0、1、2进行下一步操作:"))if number == 1:print("目前链表状态")s.travel()print("正在尾部插入数据:")p = Node(eval(input("请输入要插入的数据")))s.appendnode(p)print("操作后的链表状态")s.travel()elif number == 2:print("目前链表状态")s.travel()print("正在头部插入数据:")q = Node(eval(input("请输入要插入的数据")))s.add(q)print("操作后的链表状态")s.travel()elif number == 0:breakif __name__ == "__main__":main()

栈的顺序存储

class Stack(object):def __init__(self, size):size.MAX = sizesize.s = []self.top = 0def stackEmpty(self):if self.top == 0:return Truereturn Falsedef pop(self):if self.stackEmpty():print("栈已为空,不能执行出栈操作")else:self.top = self.top - 1return self.s.pop()if __name__ == "__main__":s = Stack(50)s.s = [1, 2, 3, 4, 5]s.top = 5while True:print("请选择操作方式")print("1、出栈0、退出")number = int(input())if number == 1:print(s.pop())else:break

队列的顺序存储

class Quene(object):def __init__(self, size):self.MAX = selfself.q = []self.front = -1self.rear = -1def isEmpty(self):if self.rear == self.front:return Truereturn Falsedef delquene(self):if self.isEmpty():print("队列已经空,不能执行出队操作")x = - 9999else:self.front = self.front + 1x = self.q[self.front]return xif __name__ == "__main__":q = Quene(50)q.q = [1, 2, 3, 4, 5]q.rear = 4q.front = -1while True:print("请选择操作方式")print("1、出队0、退出")number = int(input())if number == 1:x = q.delquene()if x != -9999:print(f"出队元素放入{x}")print("出队后队列元素为")for i in range(q.front + 1, len(q.q)):print(q.q[i], end=' ')else:break

串的顺序存储

class sqstring(object):def __init__(self,obj=None):if objis None:# 构造空串self.strvalue=[] # 字符数组存放串值self.curLen =0 # 当就串的长度elif isinstance(obj,str): # 以字符串构造串self.curLen =len(obj)self.strValue=[None]* self.curLenfor i in range(self.curlen):self.strvaluelil = obj[i]elif isinstance(obj,list): # 以字符列表梅造串self.curLen =len(obj)self.strValue =[None]* self.curLenfor i in range(self.curlen):self.strValue[i]= obj[i]def length(self):'''返回串的长度'''return self.curLendef display(self):'''打印字符串'''for i in range(self.curten):print(self.strValue[il, end='')
if __name__ ='__main__':string=input(”请输入字符串给变量string:")s=sqstring(string)while True;print("----请选择操作方式---")print("----1.打印字符串的长度并输出字符串\n----0.退出")number=int(input())if number==1:print(s.length())s.display()if number==0:break

树的存储

class Node:def __init__(self, data, parent):self.data = dataself.parent = parentclass Tree:def __init__(self):self._array = []def addNode(self, data, parent):node = Node(data, parent)self._array.append(node)def show(self):for i, v in enumerate(self._array):print('节点下标为 = {} 值为 = {} 父节点下标为{}'.format(i,v.data,v.parent))def findParent(self, node):return self._array[node.parent]if __name__ == "__main__":print("------1.建立双亲表示树------\n----2.显示建立结结果-----\n")print("------3.输入节点求双亲节点-----\n-----4.退出-----\n")tree = Tree()while True:number = int(input("请输入选择(1-4)"))if number == 1:print("请输入节点data以及双亲parent所在的下标")data = input()parent = int(input())if data != "#":tree.addNode(data.strip(), parent)else:print("数据输入结束,请选择其他选项")elif number == 2:tree.show()elif number == 3:print("请输入某一节点的数据值data,及双亲节点的下标parent求双亲节点")data = input();parent = int(input())node = Node(data, parent)node_parent = tree.findParent(node)print('父节点为={}'.format(node_parent.data))elif number == 4:breakelse:print("输入错误请重新输入数字(1-4)\n")

二叉树遍历

前序遍历

class TreeNode:def __init__(self, val, lchild=None, rchild=None):self.val = valself.lchild = lchildself.rchild = rchilddef CreateTree(Root, val):if len(val) == 0:return Rootif val[0] != '#':Root = TreeNode(val[0])val.pop(0)Root.lchild = CreateTree(Root.lchild, val)Root.rchild = CreateTree(Root.rchild, val)return Rootelse:Root = Noneval.pop(0)return Rootdef perOrderTraversal(root):if root is None:returnprint(root.val, end=' ')perOrderTraversal(root.lchild)if __name__ == '__main__':Root = Nonestrs = "-*a##b##c##"varls = list(strs)print("程序构建的前序序列:\n%s\n构建的二叉树,\n" % varls)Root = CreateTree(Root, varls)print("二叉树的前序遍历结果为:\n")perOrderTraversal(Root)

中序遍历

class TreeNode:def __init__(self, val, lchild=None, rchild=None):self.val = valself.lchild = lchildself.rchild = rchilddef CreateTree(Root, val):if len(val) == 0:return Rootif val[0] != '#':Root = TreeNode(val[0])val.pop(0)Root.lchild = CreateTree(Root.lchild, val)Root.rchild = CreateTree(Root.rchild, val)return Rootelse:Root = Noneval.pop(0)return Rootdef inOrderTraversal(root):if root is None:returninOrderTraversal(root.lchild)print(root.val, end=' ')if __name__ == '__main__':Root = Nonestrs = "-*a##b##c##"varls = list(strs)print("程序构建的前序序列:\n%s\n构建的二叉树,\n" % varls)Root = CreateTree(Root, varls)print("二叉树的中序遍历结果为:\n")inOrderTraversal(Root)

后序遍历

class TreeNode:def __init__(self, val, lchild=None, rchild=None):self.val = valself.lchild = lchildself.rchild = rchilddef CreateTree(Root, val):if len(val) == 0:return Rootif val[0] != '#':Root = TreeNode(val[0])val.pop(0)Root.lchild = CreateTree(Root.lchild, val)Root.rchild = CreateTree(Root.rchild, val)return Rootelse:Root = Noneval.pop(0)return Rootdef postOrderTraversal(root):if root is None:returnpostOrderTraversal(root.lchild)postOrderTraversal(root.rchild)if __name__ == '__main__':Root = Nonestrs = "-*a##b##c##"varls = list(strs)print("程序构建的前序序列:\n%s\n构建的二叉树,\n" % varls)Root = CreateTree(Root, varls)print("二叉树的后序遍历结果为:\n")postOrderTraversal(Root)

二分法插入排序

def insertion sort binarysearch(r):for i in range(2,len(r)):r[0]=r[i]low=1high=i-1while low<=high:m=(low+high)//2if r[e]<r[m]:high=m-1else:low=m+1for j in range(i-1,low-1,-1):r[j+1]=r[j]r[low]=r[0]return r
if __name__ =='__main__':r=[0,42,36,56,56,78,67,11,27,38]#定义列表并赋初值,其中r[0]的元素值无意义n=len(r)#输出时r[0]无意义所以不输出for i in range(1,n):print(r[i],end="")

利用普里姆算法构造最小生成树

class MGraph(object):def __init__(self, vertex):self.vertex = vertex # 表示图的节点个数self.data = vertex * [0] # 存放节点数据# 用邻接矩阵存放边上的权值self.weight = [[0 for row in range(vertex)] for col in range(vertex)]
# 创建最小生成树
class MinTree(object):# 创建图的邻接矩阵def create_graph(graph, vertex, data, weight):"""graph:图对象vertex:图对应的顶点个数data:存放图的各个顶点值的列表weight:存放图的邻接矩阵"""for i in range(vertex): # 顶点graph.data[i] = data[i]for j in range(vertex):graph.weight[i][j] = weight[i][j]#显示图的方法def show_graph(graph):for link in graph.weight:print(link)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github搜索指令

in&#xff1a;根据某个关键词进行检索 关键词&#xff1a; name&#xff1a;项目名称 description&#xff1a;项目描述 readma&#xff1a;项目帮助文档 语法&#xff1a; 需要检索的内容&#xff1a;in:name或description或readme 单独使用: (1)例如&#xff1a;检索项目…

【STM32嵌入式系统设计与开发---拓展】——1_11_1串口通信(USART)

这里写目录标题 1、一般我们都怎么进行通信的&#xff1f;&#xff08;1&#xff09;串行通行&#xff08;Serial Communication&#xff09;&#xff08;2&#xff09;并行通信&#xff08;3&#xff09;无线网络通信&#xff08;4&#xff09;网络通信&#xff08;5&#xff…

Django [实战] 通过表单上传文件

在Django中上传文件通常涉及到以下几个步骤&#xff1a; 设置你的模型以包含一个FileField或ImageField&#xff08;如果上传的是图片&#xff09;。创建一个表单&#xff0c;该表单包含一个Form或ModelForm&#xff0c;其中包含一个FileField。在你的视图中处理上传的文件。在…

Modbus转BACnet/IP网关快速对接Modbus协议设备与BA系统

摘要 在智能建筑和工业自动化领域&#xff0c;Modbus和BACnet/IP协议的集成应用越来越普遍。BA&#xff08;Building Automation&#xff0c;楼宇自动化&#xff09;系统作为现代建筑的核心&#xff0c;需要高效地处理来自不同协议的设备数据&#xff0c;负责监控和管理建筑内…

可以免费合并pdf的软件 合并pdf文件的软件免费 合并pdf的软件免费

在数字化办公的今天&#xff0c;pdf格式因其稳定性和跨平台兼容性被广泛使用。然而&#xff0c;当我们需要将多个 pdf 文件合并为一个时&#xff0c;却往往感到力不从心。本文将为你介绍几款强大的pdf文件合并软件&#xff0c;让你轻松管理文档。 方法一、使用pdf转换器 步骤1…

使用Spring Boot实现居民身份证合法性验证

使用Spring Boot实现居民身份证合法性验证 在现代社会中&#xff0c;身份证号码的合法性验证是很多系统中不可或缺的一部分。身份证号码用于确认个人身份&#xff0c;其格式和校验机制各不相同。本文将介绍如何使用Spring Boot构建一个通用控制器&#xff0c;通过API来验证中国…

easyExcel和poi的版本对应

easypoi3.0.5对应的poi版本_easypoi和poi版本对应-CSDN博客 https://github.com/alibaba/easyexcel/blob/v3.2.0/pom.xml 解决 java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader 报错-CSDN博客 参考这个文档解决的- 引入最佳版本是3.15版本 java.lang.NoClas…

微服务:网关

网关 网关,即网络的关口,当一个网络传输到另一个网络时就需要经过网关来实现 数据的路由和转发 以及 数据安全的校验 网关技术实现 SpringCloudGateWay: 基于Spring的WebFlux技术,完全支持响应式编程,吞吐能力更强 SpringCloudGateWay 依赖 <!--网关--><depe…

【Rust光年纪】数据科学与机器学习:深入了解Rust语言中的6个关键库

Rust语言中的数据科学和机器学习&#xff1a;六大库全面解析 前言 随着Rust语言的不断发展&#xff0c;越来越多的优秀库和框架涌现出来&#xff0c;为不同领域的开发者提供了丰富的选择。本文将介绍一些适用于Rust语言的机器学习、数据处理和自然语言处理领域的优秀库和框架…

JAVA毕业设计152—基于Java+Springboot+vue+小程序的个人健康管理系统小程序(源代码+数据库+15000字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue小程序的个人健康管理系统小程序(源代码数据库15000字论文)152 一、系统介绍 本项目前后端分离带小程序(可以改为ssm版本)&#xff0c;分为用户、管理员两种…

Ubuntu下载jdk:cannot execute binary file

虚拟机上Ubuntu系统安装jdk且配置环境之后&#xff0c;java -version显示cannot execute binary file&#xff0c;多番查阅推测是由于系统和jdk版本不兼容的原因。 uname -m查看系统版本位i686&#xff0c;是32位的&#xff0c;和64位的jdk版本不兼容。因此&#xff0c;下载32位…

Postman与WebSockets:实时通信的桥梁

Postman与WebSockets&#xff1a;实时通信的桥梁 在当今的Web应用中&#xff0c;实时通信变得越来越重要。WebSockets提供了一种在单个连接上进行全双工通信的方法&#xff0c;允许服务器和客户端之间进行实时数据交换。Postman&#xff0c;作为一款强大的API开发和测试工具&a…

阻止 chrome “[保存并填写地址](chrome://settings/addresses)“ 导致输入框聚焦时出现候选项

参考 禁止浏览器自动填充到表单 的这个回答 代码 要求将不可见的input框放在页面的最前面&#xff0c;如body起始处&#xff0c; chrome之类的浏览器会填充最前面的输入框。 <!-- 阻止浏览器的自动填充 --> <input type"text" name"_prevent_auto_co…

[css3] 如何设置边框颜色渐变

div {border: 4px solid;border-image: linear-gradient(to right, #8f41e9, #578aef) 1; }参考&#xff1a; 5种CSS实现渐变色边框&#xff08;Gradient borders方法的汇总

【Python】探索 Python 中的 divmod 方法

为何每次早餐 仍然魂离魄散 原来 那朝分手都要啜泣中上班 明明能够过得这关 赢回旁人盛赞 原来 顽强自爱这样难 难得的激情总枉费 残忍的好人都美丽 别怕 你将无人会代替 &#x1f3b5; 陈慧娴《情意结》 在 Python 编程中&#xff0c;经常需要同时获取除…

如何通过smtp设置使ONLYOFFICE协作空间服务器可以发送注册邀请邮件

什么是ONLYOFFICE协作空间 ONLYOFFICE协作空间&#xff0c;是Ascensio System SIA公司出品的&#xff0c;基于Web的&#xff0c;开源的&#xff0c;跨平台的&#xff0c;在线文档编辑和协作的解决方案。在线Office包含了最基本的办公三件套&#xff1a;文档编辑器、幻灯片编辑…

FPGA实验1:简单逻辑电路

一、实验目的及要求 学习Create-SOPC实验平台的使用方法&#xff1b;熟悉Quartus II 软件平台和使用 VHDL 语言设计电路的方法&#xff1b;学习简单逻辑电路的设计、仿真和硬件测试。 二、实验原理 运用Quartus II 集成环境下的VHDL文本设计方法设计半加器&#xff0c;进行波…

LInux工具(2)

目录 1.关于底行模式的一个设置 1.1设置行号 1.2取消行号 2.简单vim配置 2.1简单认识 2.2配置选项 2.3其他说明 3.库的引入 3.1背景知识 3.2对应指令 3.3相关介绍 3.4.o文件和库的链接 3.5静态库的安装和测试 3.6动静态库对比 1.关于底行模式的一个设置 1.1设置行…

黑马点评-Postman卡住sending Requst原因解决

不知道为什么&#xff0c;用这个c1e1d5的token就会一直卡死&#xff0c;但是换了一个token就解决了&#xff0c;目前不知道为什么 解决了&#xff0c;原来是这个请求下面的函数发生了死循环&#xff01;&#xff01;太瓜皮了我超&#xff01; 把num写成了count&#xff0c;导…

函数(递归)

递归&#xff1a;程序调用自身编程技巧称为递归。 在学习递归前需要粗略的了解一下内存&#xff0c;内存分为三类&#xff0c;分别是栈区、堆区和静态区。对于栈区来说&#xff0c;每调用一次函数都会为本次函数开辟一块空间&#xff0c;然而栈区也是有空间限制的&#xff0c;随…