![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 68
数据结构编程题
风云诀4
千里之行,始于足下。
展开
-
排序算法代码总结
排序算法代码总结文章目录排序算法代码总结前言直接插入排序折半插入排序冒泡排序快速排序简单选择排序堆排序归并排序排序算法比较前言以下排序方法都是从1至n的排序int main(){ int n; int a[10010]; //输入 scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } //直接插入排序 InsertSort(a, n); //折半插入排序 //InsertSort原创 2020-11-21 19:10:59 · 197 阅读 · 0 评论 -
二叉树的遍历总结
二叉树的遍历总结文章目录二叉树的遍历总结二叉树结构建立二叉树层次遍历递归的三种遍历非递归的三种遍历完整代码二叉树结构用二叉链表来存储二叉树typedef struct BiTNode //二叉树{ int data; //结点数值 struct BiTNode *lchild; struct BiTNode *rchild;}BiTNode, *BiTree;建立二叉树输入一个数组,以层次遍历的顺序进行建树,规定数组元素都大于0。当数组元素为-1时,表示该结点为空。举个例子,比如数原创 2020-11-18 13:46:14 · 567 阅读 · 0 评论 -
二十八、 统计工龄
二十八、 统计工龄文章目录二十八、 统计工龄题目描述解题思路上机代码题目描述给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。输入格式:输入首先给出正整数N(即员工总人数);随后给出N个整数,即每个员工的工龄,范围在[18, 65]。输出格式:按工龄的递增顺序输出每个工龄的员工个数,格式为:“工龄:人数”。每项占一行。如果人数为0则不输出该项。测试输入期待的输出时间限制内存限制额外进程测试用例 1830 20 20 50 37 21 51 202原创 2020-11-14 22:09:15 · 379 阅读 · 0 评论 -
二十七、排序
二十七、排序文章目录二十七、排序题目描述解题思路上机代码补充说明题目描述用堆排序算法按关键字递减的顺序排序。**输入:**待排序记录数(整数)和待排序记录(整数序列);**输出:**建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3)测试输入期待的输出时间限制内存限制额外进程测试用例 1611121614151016 15 11 14 12 10 15 14 11 10 12 14 12 11 101秒64M0测试用例 2998765原创 2020-11-14 22:08:12 · 699 阅读 · 0 评论 -
二十六、平衡二叉树
二十六、平衡二叉树文章目录二十六、平衡二叉树题目描述解题思路上机代码题目描述程序输入一个字符串(只包含小写字母),请按照字符的输入顺序建立平衡二叉排序树,并分别输出二叉树的先序序列、中序序列和后序序列,最后输出该二叉树向左旋转 90 度后的结构。例如:向左旋转 90 度后,以每层向里缩进 4 个空格的方式输出,输出结果为: ig fa dc b输入:agxnzyimk输出:Preorder: xigamknzyInorder: agikmnxyz原创 2020-11-14 22:06:42 · 1097 阅读 · 0 评论 -
二十五、求单点的最短路径
二十五、求单点的最短路径文章目录二十五、求单点的最短路径题目描述解题思路上机代码题目描述求从指定源点出发到各个顶点的最短路径。**假设:**图中结点名均为单个互不相同的字母,权值均>0。输入:第一行:结点数量n,弧数量e,源点后续e行:<结点,结点,权值>输出:按结点的升序输出到达各个结点的最短路径长度测试输入期待的输出时间限制内存限制额外进程测试用例 17,10,a<a,b,13><a,c,8><c,d,5原创 2020-11-14 10:49:01 · 1600 阅读 · 0 评论 -
二十四、网络楼楼通
二十四、网络楼楼通文章目录二十四、网络楼楼通题目描述解题思路上机代码题目描述现有学校宿舍区之间要铺设光纤建设网络,在施工预算的统计数据表中,列出了有可能建设光缆的若干条管线的成本,求使每栋楼都能够接入校园网且使管网建设费用成本最低。输入:第一行数据包括楼宇的数目正整数N(≤1000)和候选管网数目M(≤3N);随后的M行对应M条线路,每行给出3个正整数,分别是该条线路直接连通的两个楼宇的编号以及预算成本(为简单起见,城镇从1到N编号)。输出:输出建设楼楼通需要的最低成本。如果输入数据不足以保原创 2020-11-14 10:46:30 · 1999 阅读 · 0 评论 -
二十三、图的广度优先遍历
二十三、图的广度优先遍历文章目录二十三、图的广度优先遍历题目描述解题思路上机代码题目描述程序的输入是无向图的顶点序列和边序列(顶点序列以*为结束标志,边序列以-1,-1为结束标志)。程序的输出为图的邻接表和广度优先遍历序列。例如:程序输入为:abcdef*0,10,41,41,52,32,53,5-1,-1程序的输出为:the ALGraph isa 4 1b 5 4 0c 5 3d 5 2e 1 0f 3 2 1the Breadth-First-S原创 2020-11-14 10:41:46 · 672 阅读 · 0 评论 -
二十二、计算WPL
二十二、计算WPL文章目录二十二、计算WPL题目描述解题思路上机代码题目描述Huffman编码是通信系统中常用的一种不等长编码,它的特点是:能够使编码之后的电文长度最短。输入:第一行为要编码的符号数量n第二行~第n+1行为每个符号出现的频率输出:对应哈夫曼树的带权路径长度WPL测试输入期待的输出时间限制内存限制额外进程测试用例 1575249WPL=601秒64M0测试用例 2524233WPL=321秒64M0解题思路哈夫曼树原创 2020-11-13 21:46:26 · 3515 阅读 · 1 评论 -
二十一、前缀码判定
二十一、前缀码判定文章目录二十一、前缀码判定题目描述解题思路上机代码题目描述前缀码:任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。请编写一个程序,判断输入的n个由1和0组成的编码是否为前缀码。如果这n个编码是前缀码,则输出"YES”;否则输出第一个与前面编码发生矛盾的编码。输入:第1行为n(表示下面有n行编码)第2~n+1行为n个由0或1组成的编码**输出:**判断结果例如,如果输入:5000110110111每一个字符均不是其他字符编码的前缀,所以,输出:YE原创 2020-11-13 21:44:30 · 4197 阅读 · 1 评论 -
二十、 二叉树的同构
二十、 二叉树的同构文章目录二十、 二叉树的同构题目描述解题思路上机代码补充说明题目描述给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出 2棵二叉树的信息。对于每棵树,第一行中给出一个非负整数N (≤20),即该树的结点数(此时假设结点从0到N−1编号);随后N行,原创 2020-11-13 20:17:17 · 963 阅读 · 0 评论 -
十九、二叉树的最近的公共祖先
十九、二叉树的最近的公共祖先文章目录十九、二叉树的最近的公共祖先题目描述解题思路上机代码:题目描述设顺序存储的二叉树中有编号为 i 和 j 的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。输入: 输入第1行给出正整数n(≤1000),即顺序存储的最大容量;第2行给出n个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树);第3行给出一对结点编号 i 和 j 。题目保证输入正确对应一棵二叉树,且1≤ i,j ≤n。输出:如果i或j对应的是原创 2020-11-13 19:20:51 · 410 阅读 · 0 评论 -
十八、二叉树遍历序列还原
十八、二叉树遍历序列还原文章目录十八、二叉树遍历序列还原题目描述题目描述给出二叉树的中序遍历序列和后序遍历序列,编程还原该二叉树。输入:第1行为二叉树的中序遍历序列第2行为二叉树的后序遍历序列输出:二叉树的按层遍历序列测试输入期待的输出时间限制内存限制额外进程测试用例 1badcfegbdfgecaabcdefg1秒64M0测试用例 2cbdafegcbdfgeaadebfgc1秒64M0测试用例 3edcbaedcbaab原创 2020-11-01 17:41:54 · 1282 阅读 · 0 评论 -
十七、二叉树的建立与基本操作
十七、二叉树的建立与基本操作文章目录十七、二叉树的建立与基本操作题目描述解题思路上机代码一点建议题目描述编写程序实现二叉树的如下操作:建立二叉链表二叉树的先序、中序、后序遍历求二叉树的叶子结点个数将二叉树中所有结点的左、右子树相互交换输入:按完全二叉树的层次关系给出二叉树的遍历序列(#表示虚结点,数据结点为单一字符)。输出:二叉树的凹入表示 二叉树的先序序列、中序序列、后序序列 二叉树叶子结点个数 左、右子树相互交换后的二叉树的凹入表示 左、右子树相互交换后的二叉树原创 2020-11-01 17:01:00 · 2152 阅读 · 1 评论 -
十六、广义表的建立与基本操作
十六、广义表的建立与基本操作文章目录十六、广义表的建立与基本操作题目描述解题思路上机代码补充说明题目描述采用"头尾法存储广义表,实现以下广义表的操作:1.Status CreateGList( GList &L, char *S ) // 根据字符串 S 表示的广义表内容建立广义表数据结构;2.GList GetHead( GList L) // 取表头运算3.GList GetTail( GList L) // 取表尾运算4.void DestroyGList( GList &原创 2020-10-30 20:11:54 · 2446 阅读 · 0 评论 -
十五、稀疏矩阵的乘法运算
十五、稀疏矩阵的乘法运算文章目录十五、稀疏矩阵的乘法运算题目描述解题思路上机代码题目描述数据压缩是提高传输、存储效率一种技术。教材第5章介绍了两种简单的压缩存储方法。本实验要求实现两个稀疏矩阵相乘积的算法**。其中稀疏矩阵非零元素数量小于100.**输入:第1个稀疏矩阵的行数列数非零元个数(三个数都大于0)三元组第2个稀疏矩阵的行数列数非零元个数(三个数都大于0)三元组以行为主序输入稀疏矩阵三元组表输出:乘积矩阵的行数列数非零元个数(三个数都大于0)三元组原创 2020-10-30 18:51:40 · 8733 阅读 · 0 评论 -
十四、矩阵的快速转置算法
十四、矩阵的快速转置算法文章目录十四、矩阵的快速转置算法题目描述解题思路上机代码题目描述数据压缩是提高传输、存储效率一种技术。教材第5章介绍了两种简单的压缩存储方法。本实验要求实现三元组顺序表表示下的矩阵快速转置算法。输入: 稀疏矩阵的行数、列数、非零元个数(三个数都大于0) 以行为主序输入稀疏矩阵三元组表输出: 辅助数组num[ ] 辅助数组cpot[ ] 以行为主序输出对应的转置矩阵三元组表测试输入期待的输出时间限制内存限制额外进程测试用例 1原创 2020-10-29 21:33:38 · 4983 阅读 · 0 评论 -
十三、判断出栈序列
十三、判断出栈序列文章目录十三、判断出栈序列题目描述解题思路上机代码题目描述请判断:指定的序列能否仅由 入栈 和 出栈 操作得到。输入:有若干组数据输入每组数据中,第一行为两个个整数 n 和 m。n 表示需要依次从 1~n 入栈,m 表示这组数据有 m 个出栈序列需要判断,当 n=0 且 m=0 时停止。接下来有 m 行,每行表示一个出栈序列输出:对每一个出栈序列,如果能正常出栈,则输出 Yes,否则输出 No。sample:input:5 21 2 3 4 55 4 1 2 3原创 2020-10-29 21:04:22 · 1596 阅读 · 0 评论 -
十二、迷宫问题
十二、迷宫问题文章目录十二、迷宫问题题目描述题目描述迷宫有一个入口,一个出口。一个人从入口走进迷宫,目标是找到出口。阴影部分和迷宫的外框为墙,每一步走一格,每格有四个可走的方向,探索顺序为地图方向:南(下)、东(右)、北(上)、西(左)。输入:输入迷宫数组。第一行数据表示一个 n*n (n<=100)的迷宫;第二行开始的n行为迷宫数据。 其中:0表示路,1表示墙,起点在左上角 <1,1> 的位置,终点在右下角 <n,n> 的位置。输出:若有解,输出从入口到出原创 2020-10-25 17:01:22 · 2344 阅读 · 0 评论 -
十一、括号匹配
十一、括号匹配文章目录十一、括号匹配题目描述解题思路上机代码题目描述假设一个算术表达式中包含有三种类型的括号:圆括号()、方括号[ ]和花括号{ }。编写一个判断表达式中括号是否匹配的程序,匹配返回Match succeed!,否则返回Match false!。例:[1+2 * (3+4*(5+6))] 括号匹配 (1+2)(1+2[(1+2)+3) 括号不匹配输入:包含圆括号、方括号和花括号的表达式输出:匹配输出 Match succeed! 不匹配输出 Match原创 2020-10-25 14:57:53 · 528 阅读 · 0 评论 -
十、从中缀向后缀转换表达式
十、从中缀向后缀转换表达式文章目录十、从中缀向后缀转换表达式题目描述解题思路上机代码题目描述中缀表达式就是我们通常所书写的数学表达式,后缀表达式也称为逆波兰表达式,在编译程序对我们书写的程序中的表达式进行语法检查时,往往就可以通过逆波兰表达式进行。我们所要设计并实现的程序就是将中缀表示的算术表达式转换成后缀表示,例如,将中缀表达式(A 一 (B*C 十 D) *E) / (F 十 G )转换为后缀表示为:ABC*D 十 E * 一 FG十/**注意:**为了简化编程实现,假定变量名均为单个字母原创 2020-10-24 23:12:02 · 4542 阅读 · 3 评论 -
九、表达式求值(1)
九、表达式求值(1)文章目录九、表达式求值(1)题目描述解题思路上机代码题目描述背景:我们的教材中已经介绍了表达式求值的算法,现在我们将该算法的功能进行扩展,要求可以处理的运算符包括:+、-、*、/、%(整数取余)、^(乘方)、(、)。要求:采用算符优先算法,计算的中间结果只保留整数。输入:第一行为整数N。表示下面有N个表达式从第二行起的后面N行为N个由整数构成的表达式输出:共N行,每行为相应表达式的计算结果。如果判断出表达式有错误,则输出:error.如果在计算过程中出现除数为0原创 2020-10-21 16:46:45 · 2933 阅读 · 3 评论 -
B+树
B+树文章目录B+树1.基础概念2.查找3.插入4.删除5.更新6.示例参考资料1.基础概念B+树是应数据库需求出现的一种B树的变形树,是一个m叉多路平衡查找树,B+树的查找、插入和删除操作都和 B树基本类似。一颗 m 阶的 B+树:结点的关键字个数与子树个数相同,即一个关键字对应一颗子树根结点的关键字范围为 1 ≤ n ≤ m,但是非叶根结点必须至少有两颗子树非根内部结点的关键字范围为 ⌈m/2⌉\lceil{m/2}\rceil⌈m/2⌉ ≤ n ≤ m叶子结点的关键字范围为 ⌈m/2原创 2020-09-25 21:11:40 · 160 阅读 · 0 评论 -
八、求循环节
八、求循环节文章目录八、求循环节题目描述解题思路上机代码题目描述对于任意的真分数 N/M ( 0 < N < M ),均可以求出对应的小数。如果采用链表存储各位小数,对于循环节采用循环链表表示,则所有分数均可以表示为如下链表形式。输入: N M输出: 整个循环节要求: 编写一个尽可能高效的查找循环节起始点的函数: NODE * find( NODE * head, int * n ) 。函数的返回值为循环节的起点(即图中的指针p),n为循环节的长度。说明:提交程序时请同时提交将分原创 2020-07-23 15:21:44 · 4468 阅读 · 0 评论 -
七、一元多项式相乘
七、一元多项式相乘题目描述要求采用链表形式,求两个一元多项式的乘积:h3 = h1*h2。函数原型为:void multiplication( NODE * h1, NODE * h2, NODE * h3 )。输入:输入数据为两行,分别表示两个一元多项式。每个一元多项式以指数递增的顺序输入多项式各项的系数(整数)、指数(整数)。例如:1+2x+x2表示为:<1,0>,<2,1>,<1,2>,输出:以指数递增的顺序输出乘积: <系数,指数>,&l原创 2020-07-23 12:52:40 · 2745 阅读 · 0 评论 -
六、求循环小数
六、求循环小数文章目录六、求循环小数题目描述解题思路上机代码题目描述对于任意的真分数 N/M ( 0 < N < M ),均可以求出对应的小数。如果采用链表表示各个小数,对于循环节采用循环链表表示,则所有分数均可以表示为如下链表形式。输入: N M k输出: 转换后的小数(不超过 k )要求: 仅编写将分数转换为小数的函数 change( int n, int m, NODE * head ) 。预设代码:/* PRESET CODE BEGIN - NEVER TOUCH C原创 2020-07-23 10:24:35 · 2165 阅读 · 0 评论 -
五、一元多项式相加
五、一元多项式相加文章目录五、一元多项式相加题目描述解题思路上机代码题目描述编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能:1、多项式求和输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc(提示:调用CreatePolyn(polynomial &P,int m)。输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc(提示:调用AddPolyn(polynomial &Pa, polyn原创 2020-07-22 11:07:10 · 1760 阅读 · 0 评论 -
四、双向链表复制
四、双向链表复制文章目录四、双向链表复制题目描述解题思路上机代码题目描述设一带头结点的双向循环链表表示的线性表:L =(a1, a2, …… , an)请写出一个时间复杂度为O(n)的算法,将L改造为:L =(a1, a2, ……, an-1, an, an-1, ……, a2, a1)预设代码:/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW *//*设一带头结点的双向循环链表表示的线性表:L =(a1, a2, …… , an)请写出一个时原创 2020-07-16 12:34:07 · 915 阅读 · 0 评论 -
三、单词压缩存储
三、单词压缩存储文章目录三、单词压缩存储题目描述解题思路上机代码题目描述如果采用单链表保存单词,可采用如下办法压缩存储空间。如果两个单词的后缀相同,则可以用同一个存储空间保存相同的后缀。例如,原来分别采用单链表保存的单词Str1“loading”和单词Str2“being”,经过压缩后的存储形式如下。请设计一个高效的算法完成两个单链表的压缩存储。要求:阅读预设代码,编写函数SNODE * ziplist( SNODE * head1, SNODE * head2 )ziplist的功能是:在两原创 2020-07-15 15:32:18 · 431 阅读 · 0 评论 -
二、集合合并
二、集合合并文章目录二、集合合并题目描述解题思路上机代码简单拓展题目描述我们的教材上讨论了一个如何使用基本运算将两个集合合并的问题。下面,我们就采用基本操作完成集合合并的操作。问题: 线性表的合并A=A∪B设:有两个集合A和B分别用两个线性表LA和LB表示。求一个新的集合 A=A∪B。输入:两个集合输出:按照要求合并后的集合。编程要求:题目中已经给出了主函数和部分已经实现的基本操作,请阅读给出的程序,编写其他尚未完成的基本操作(基本操作的定义请参见教材)。注意:提交代码的时候,仅需提交原创 2020-07-13 22:34:42 · 2273 阅读 · 0 评论 -
一、约瑟夫问题
一、约瑟夫问题文章目录一、约瑟夫问题题目描述解题思路上机代码:解法一:数组模拟解法二:链表模拟题目描述约瑟夫问题是一个经典的问题(大一我们讲过)。这个问题可以用数组,也可以用链表。作为复习,大家可以试试你自己的算法。已知n个人(不妨分别以编号1,2,3,…,n 代表 )围坐在一张圆桌周围,从编号为 k 的人开始,从1开始顺时针报数1, 2, 3, …,顺时针数到m 的那个人,出列并输出。然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,…依此重复下去,直到圆桌周围的人全部原创 2020-07-12 13:40:56 · 836 阅读 · 0 评论 -
数据结构综述
数据结构综述文章目录数据结构综述前言思维导图上机实践前言数据结构是计算机相关专业必修的一门专业课,虽然大二的时候学习过,但是很多概念还是有些遗忘了,有必要再把教材从头再看一遍。教材使用的是清华大学出版社的严蔚敏的数据结构(C语言版)一书。不得不讲这本书编写得确实经典,现在重读一遍对数据结构这门学科又有了更深的认识。花了一周时间,仔细通读了教材,用 XMind 作了一个思维导图,把具体的知识点和联系都理顺了一遍,确实思路清晰了很多。思维导图这是朴素版的思维导图,适合复习完成时使用。假设自己已经原创 2020-07-11 20:08:54 · 606 阅读 · 0 评论