数据结构代码
文章目录
- 线性表的插入
- 线性表的删除
- 单链表的建立
- 栈的顺序存储
- 队列的顺序存储
- 串的顺序存储
- 树的存储
- 二叉树遍历
- 前序遍历
- 中序遍历
- 后序遍历
- 二分法插入排序
- 利用普里姆算法构造最小生成树
线性表的插入
#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 内存…...
SpringBoot 跨域请求处理全攻略:从原理到实践
文章目录 SpringBoot 如何处理跨域请求?你能说出几种方法?跨域请求概述跨域解决方案1. 使用CrossOrigin注解2. 使用WebMvcConfigurer配置类3. 使用过滤器(Filter)4. 使用Spring Security处理CORS5.使用Spring Cloud Gateway处理CO…...
vulnhub——Ai-Web1靶机渗透
Ai-Web1靶机渗透 靶机下载: 官网地址:https://www.vulnhub.com/entry/ai-web-1,353/ 攻击机:kali2024 一、信息收集 发下目标主机的IP为:192.168.201.141 用nmap工具扫描一下对方主机和服务 发现他打开了80端口 发现搜不到于是…...
sqlalchemy事件监听
sqlalchemy事件监听 SQLAlchemy 中的事件监听允许您在特定事件发生时执行自定义的 Python 代码。这些事件可以是与ORM(对象关系映射)或核心组件相关的操作,比如表、类、会话或事务的插入、更新、删除等操作。通过事件监听,您可以实现日志记录、审计或执行业务规则等功能。…...
【Django+Vue3 线上教育平台项目实战】Celery赋能:优化订单超时处理与自动化定时任务调度
文章目录 前言⭐✨💫🔥📖一、Celery⭐1.基本概念及介绍:✨2.使用步骤💫 二、订单超时 取消订单(Celery)🔥具体实现流程📖 前言⭐✨💫🔥📖 在构建复…...
CSS3 教程
CSS3 教程 引言 CSS3,即层叠样式表的第三代,是网页设计和开发中不可或缺的技术之一。它为HTML元素提供了丰富的样式定义,使得网页不仅内容丰富,而且外观美观、交互性强。本教程将详细介绍CSS3的基础知识、高级特性以及最佳实践&…...
树与二叉树学习笔记
树与二叉树 计算机中的树树的概念树的类型 什么是二叉树二叉树:定义与特点二叉树:前序、中序、后序遍历二叉树:深度、广度优先遍历二叉树:线索化二叉树:序列化与反序列化 haffman树平均编码长度构建haffman树haffman树…...
消费金融系统开发回忆录
架构设计图 整个支付链路上的功能 支付系统应该有:账户管理、渠道管理、支付管理、对账管理、清算管理、结算管理 一笔支付订单,在支付系统侧就是要记录清楚,谁发起的、对哪个商品进行支付、通过哪个渠道支付、支付时间、支付结果等…...
org.springframework.context.ApplicationContext发送消息
1、创建消息的实体类 package com.demo;/*** 监听的实体类**/ public class EventMessage {private String name;public EventMessage(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} }2、创建消…...
Java8-21新特性
简介 由于Java官方最近更新越来越频繁,而长期支持维护的版本LTS版每隔几年才推出一个,大规模商用的JDK只可能选择LTS版,因此这里只简单记录JDK8,11,17,21。 jdk8 Lambda表达式: Lambda表达式…...
NodeJS系列面试题
大家好,我是有用就扩散,有用就点赞。 有没有写过Koa中间件,说一下中间件原理,介绍下自己写过的中间件 koa本来就是一个轻量级框架,本身支持的功能并不多,功能都是通过中间件来实现不同的需求。开发者可以通…...
做垂直网站/百度搜索引擎怎么做
ZZphpserver 是一款拥有自动安装配置PHPMySQL等Web环境的一键安装包软件,依托强大的技术和专业的团队,我们开发了多款专用软件,为超过用户解决了建站和seo难的问题。【配置环境】1.PHPMYSQL2.Rerrite(伪静态)3.navicat(数据库管理软件)4.Serv…...
网站建设首页图片插入/网站推广在哪好
arr.reduce(function(prev,cur,index,arr){ ... }, init);其中, arr 表示原数组; prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提…...
用asp.net做的 购物网站视频/营销推广软文案例
水! 判断一下中间部分是否有相邻的,行列边界是否有一样的 【代码】 /* *********************************************** Author :angon************************************************ */ #include <stdio.h> #include <string.h…...
洛阳bbs/广州seo怎么做
在多线程应用中,所有的线程都是共享资源,线程时并发运行的,此时,就有可能发导致多个线程同时访问操作共享资源。假如有AB两个线程,A线程读共享资源,B线程写共享资源,就会发生A线程读取的共享资源…...
丰台建设公司网站/重庆网站seo服务
使用C#连接MySQL时,经常会用到命名空间using MySql.Data.MySqlClient; 这说明VS中没有添加引用,解决方法如下: 1,下载MySQL.Data.dll,网上很容易找到 2,将其存放到Windows/Syst…...
毕业设计做网站难吗/百度通用网址
2年前,2018年3月12日微信公众号宣布取消留言功能,新注册的账号一律都没有留言功能了,让很多运营者大呼头疼。3天前,2020年8月18日微信公众号推出内测问题功能,可以在文章中和用户互动,解决了很多运营者没办…...