数据结构代码
文章目录
- 线性表的插入
- 线性表的删除
- 单链表的建立
- 栈的顺序存储
- 队列的顺序存储
- 串的顺序存储
- 树的存储
- 二叉树遍历
- 前序遍历
- 中序遍历
- 后序遍历
- 二分法插入排序
- 利用普里姆算法构造最小生成树
线性表的插入
#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)
相关文章:
数据结构代码
文章目录 线性表的插入线性表的删除单链表的建立栈的顺序存储队列的顺序存储串的顺序存储树的存储二叉树遍历前序遍历中序遍历后序遍历 二分法插入排序利用普里姆算法构造最小生成树 线性表的插入 #a: 列表,pos: 要插入的位置,key: 要插入的数据&#x…...
环信IM x 亚马逊云科技,助力出海企业实现可靠通讯服务
随着全球化进程的加速,越来越多的企业选择出海,拓展国际市场。然而,面对不同国家和地区的用户,企业在即时通讯方面遇到了诸多挑战。为了帮助企业克服这些困难,环信IM与亚马逊云科技强强联手,共同推出了一套…...
R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图(二D)
R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图(二D) 散点图示例解析效果 饼图示例解析效果 折线图示例解析效果 柱状图示例解析效果 箱线图示例解析效果 直方图示例解析效果 等高线图使用filled.contour函数示例…...
go中map
文章目录 Map简介哈希表与Map的概念Go语言内建的Map类型Map的声明Map的初始化Map的访问Map的添加和修改Map的删除Map的遍历 Map的基本使用Map的声明与初始化Map的访问与操作Map的删除Map的遍历Map的并发问题实现线程安全的Map 3. Map的访问与操作3.1 访问Map元素代码示例&#…...
02-用户画像-技术架构+业务划分
技术架构 python开发 es flume 流数据读取写入kafka文件 kafka 消息队列 sqoop 将数据导入数仓hive StructureStream 动态画像的处理 SparkSQL 静态画像的处理 ,批数据处理 读取kafka获取用户行为数据 fineBI 数据展示 业务划分 离线业务 静态画像 …...
HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号1
本来打算找到工作再整理高级的题库,但一直没什么面试机会。宅在家里也不知道干些什么。索性就把高级的题库整理出来了。也算有头有尾。高级的题库更新之后,专业性更强了,不是真正从事这一行的,很难做出来。本人就是个小菜鸡&#…...
敲详细的springboot中使用RabbitMQ的源码解析
这里介绍的源码主要是涉及springboot框架下的rabbitmq客户端代码(具体在springframework.amqp.rabbit包下,区分一下不由springboot直接接管的spring-rabbit的内容),springboot基于RabbitMQ的Java客户端建立了简便易用的框架。 sp…...
《Nginx核心技术》第04章:生成缩略图
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀,…...
Web 3.0革新:社交金融与边玩边赚开启用户数据主权时代
目录 Web 3.0与社交商业模式 传统社交平台的问题 去中心化社交创新 Mirror:去中心化内容发布平台 Lens Protocol:去中心化社交图谱 Maskbook:隐私保护的社交方式 Web 3.0与与边玩边赚模式 经济模型解析 新商业模式的探索 Axie Infi…...
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 中文分词模拟器(200分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…...
Cisco 路由重发布 —— 实现路由信息在不同路由域间的传递
一、技术背景 在实际的组网中,可能会遇到这样一个场景:在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯 Cisco 的设备,使用 EIGRP 协议将网络的路由打通。但是后来网络扩容,增加了一批华为的设备&#…...
mysql8和mysql5版本在使用mybatis框架时的注意事项
mysql8和mysql5版本在使用mybatis框架时有些注意事项,两者的区别在于两处地方的设置。有一处未设置好,就会出现以下错误:java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Can…...
为什么要有指针和引用类型?
简单说,是为了必要的,且很基础的表达能力 (描述能力)。 0. 数据四要素:名、值、址、型 指针、引用的基础,就是在描述一个数据时,除了这个数据的“值”以外,引入了这个数据的“地址…...
vivado INTERNAL_VREF
内部 具有差分输入缓冲器的单端I/O标准需要输入参考 电压(VREF)。当I/O组中需要VREF时,您可以使用专用VREF 引脚作为外部VREF电源,或使用INTERNAL_VREF内部生成的VREF 属性,或者对于UltraScale设备上的HP I/O组&#x…...
VScode通过Graphviz插件和dot文件绘制层次图,导出svg
1、安装插件 在VScode中安装Graphviz Interactive Preview插件,参考。 2、创建dot文件 在本地创建一个后缀为dot的文件,如test.dot,并写入以下内容: digraph testGraph {label "层次图";node [shape square; widt…...
MMCV 核心组件分析(一):整体概述
概述 MMCV 是计算机视觉研究的基础库,并提供以下功能。...
阵列信号处理学习笔记(一)--阵列信号处理定义
阵列信号 阵列信号处理学习笔记(一)–阵列信号处理定义 阵列信号处理学习笔记(二)–空域滤波基本原理 文章目录 阵列信号前言一、阵列信号处理定义1.1 信号1.2 阵列 二、雷达数据中哪些属于空间采样总结 前言 MOOC 阵列信号处理…...
[HTML]一文掌握
背景知识 主流浏览器 浏览器是展示和运行网页的平台, 常见的五大浏览器有 IE浏览器、火狐浏览器(Firefox)、谷歌浏览器(Chrome)、Safari浏览器、欧朋浏览器(Opera) 渲染引擎 浏览器解析代码渲…...
ABAP使用SQL直接更新数据库与使用IN UPDATE TASK的区别
1. 背景 刚接触ABAP的小伙伴常常会有这样的疑问,为什么不直接使用Open SQL直接更新数据库,而要把对DB的操作封装到IN UPDATE TASK中呢? 对于这个问题,比较常见的解释是,IN UPDATE TASK的方式会保证数据更新的一致性。…...
Android GWP-Asan使用与实现原理
目录 一、 背景 二、GWP-Asan介绍 2.1 什么是GWP-ASan 2.2 GWP-Asan与其他几类工具对比 2.3 GWP-ASan与其它内存分配器的兼容性 三、GWP-Asan如何使用 3.1 app进程 3.2 native进程 四、GWP-Asan实现原理 4.1 进程启用GWP-Asan 4.2 初始化 4.3 内存分配 4.3.1 内存…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
