数据结构代码
文章目录
- 线性表的插入
- 线性表的删除
- 单链表的建立
- 栈的顺序存储
- 队列的顺序存储
- 串的顺序存储
- 树的存储
- 二叉树遍历
- 前序遍历
- 中序遍历
- 后序遍历
- 二分法插入排序
- 利用普里姆算法构造最小生成树
线性表的插入
#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 内存…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能 查看官网:https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…...
代理服务器-LVS的3种模式与调度算法
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Web服务器,其中以Nginx为主,本章我们来讲解几个代理软件:…...
统计按位或能得到最大值的子集数目
我们先来看题目描述: 给你一个整数数组 nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素(或不删除)得到,…...
qt 双缓冲案例对比
双缓冲 1.双缓冲原理 单缓冲:在paintEvent中直接绘制到屏幕,绘制过程被用户看到 双缓冲:先在redrawBuffer绘制到缓冲区,然后一次性显示完整结果 代码结构 单缓冲:所有绘制逻辑在paintEvent中 双缓冲:绘制…...
