![](https://img-blog.csdnimg.cn/20210306101952375.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构提高25题
开写之日Disney Raya 上映
systemyff
不会修电脑。
展开
-
24、邻接表:无向图(网)回路
问题描述 :目的:使用C++模板设计并逐步完善图的邻接表抽象数据类型(ADT)。内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接表ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)(2)设计并实现一个算法,基于广度优先搜索的思想,对于给定的无向图(网),判断其是否有回路(环)。如存在回路,返回true;否则返回false。图的存储结构采用邻接表。将其加入到ADT中。注意:DG.原创 2021-06-01 19:50:05 · 756 阅读 · 0 评论 -
23、邻接表:BFS实现拓扑排序
问题描述 :目的:使用C++模板设计并逐步完善图的邻接表抽象数据类型(ADT)。内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接表ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)(2)设计并实现一个算法,基于广度优先搜索的思想,对于给定的有向图(网),实现拓扑排序。如排序成功,返回true;否则返回false。无论排序是否成功,都请给出最终的排序结果。图的存储结构采用邻接表。将其加入原创 2021-06-01 19:49:15 · 603 阅读 · 0 评论 -
22、邻接矩阵:有向无环图(DAG)的判断
问题描述 :目的:使用C++模板设计并逐步完善图的邻接矩阵抽象数据类型(ADT)。内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接矩阵ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)(2)设计并实现一个算法,对于给定的有向图(网),判断其是否是有向无环图(DAG)。如是(不存在回路),返回true;否则返回false。图的存储结构采用邻接矩阵。将其加入到ADT中。注意:DG.原创 2021-05-31 23:04:58 · 1258 阅读 · 0 评论 -
21、邻接矩阵:无向图回路的判断
问题描述 :目的:使用C++模板设计并逐步完善图的邻接矩阵抽象数据类型(ADT)。内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接矩阵ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)(2)设计并实现一个算法,基于广度优先搜索的思想,对于给定的无向图(网),判断其是否有回路(环)。如存在回路,返回true;否则返回false。图的存储结构采用邻接矩阵。将其加入到ADT中。注意.原创 2021-05-31 23:03:56 · 2886 阅读 · 0 评论 -
20、邻接矩阵:BFS实现拓扑排序
问题描述 :目的:使用C++模板设计并逐步完善图的邻接矩阵抽象数据类型(ADT)。内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接矩阵ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)(2)设计并实现一个算法,基于广度优先搜索的思想,对于给定的有向图(网),实现拓扑排序。如排序成功,返回true;否则返回false。无论排序是否成功,都请给出最终的排序结果。图的存储结构采用邻接矩阵。将原创 2021-05-31 23:03:03 · 552 阅读 · 0 评论 -
19、哈夫曼树的建立(二叉链表)
问题描述 :内容:请参照二叉树的ADT模板,设计Huffman树的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的二叉树ADT原型文件,自行设计Huffman树的ADT。)应用:要求设计一个算法,使用动态存储的方式,实现Huffman树的ADT。提示:动态存储是指在新添加一个数据元素时,为它申请一个动态变量。删除一个数据元素时,释放该元素的存储空间。huffma.原创 2021-05-31 23:02:01 · 976 阅读 · 0 评论 -
18、二叉树:表达式二叉树转换成中缀式(括弧处理)
问题描述 :内容:(1)请参照链表的ADT模板,设计二叉树并逐步完善的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。)注意:二叉树ADT的基本操作的算法设计很多要用到递归的程序设计方法。(2)ADT的简单应用:使用该ADT设计并实现若干应用二叉树的算法设计。应用:要求设计一个算法,将表达式二叉树转换成原始的..原创 2021-05-31 23:00:22 · 1412 阅读 · 0 评论 -
17、二叉树:按树状打印
问题描述 :内容:(1)请参照链表的ADT模板,设计二叉树并逐步完善的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。)注意:二叉树ADT的基本操作的算法设计很多要用到递归的程序设计方法。(2)基本操作20:在二叉树的二叉链表存储形式建立的基础上,设计并完成按树状打印二叉树的算法。...原创 2021-05-31 20:19:33 · 997 阅读 · 0 评论 -
15、二叉树:距离最近的共同祖先
问题描述 :目的:使用C++模板设计二叉树的抽象数据类型(ADT)。并在此基础上,使用二叉树ADT的基本操作,设计并实现简单应用的算法设计。内容:(1)请参照链表的ADT模板,设计二叉树的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。)注意:二叉树ADT的基本操作的算法设计很多要用到递归的程序设计方法。(2)AD.原创 2021-05-31 20:18:40 · 643 阅读 · 0 评论 -
13、二叉树:后序遍历非递归实现
问题描述 :目的:使用C++模板设计二叉树的抽象数据类型(ADT)。并在此基础上,使用二叉树ADT的基本操作,设计并实现简单应用的算法设计。内容:(1)请参照链表的ADT模板,设计二叉树的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。)(2)ADT的简单应用:使用该ADT设计并实现若干应用二叉树的算法设计。..原创 2021-05-31 20:17:38 · 313 阅读 · 0 评论 -
12、二叉树:中序遍历非递归实现
问题描述 :目的:使用C++模板设计二叉树的抽象数据类型(ADT)。并在此基础上,使用二叉树ADT的基本操作,设计并实现简单应用的算法设计。内容:(1)请参照链表的ADT模板,设计二叉树的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。)(2)ADT的简单应用:使用该ADT设计并实现若干应用二叉树的算法设计。..原创 2021-05-31 20:16:37 · 432 阅读 · 0 评论 -
11、二叉树:前序遍历非递归实现
问题描述 :目的:使用C++模板设计二叉树的抽象数据类型(ADT)。并在此基础上,使用二叉树ADT的基本操作,设计并实现简单应用的算法设计。内容:(1)请参照链表的ADT模板,设计二叉树的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。)(2)ADT的简单应用:使用该ADT设计并实现若干应用二叉树的算法设计。..原创 2021-05-31 20:15:39 · 465 阅读 · 0 评论 -
25、邻接表:有向无环图(DAG)的判断
问题描述 :目的:使用C++模板设计并逐步完善图的邻接表抽象数据类型(ADT)。内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接表ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)(2)设计并实现一个算法,对于给定的有向图(网),判断其是否是有向无环图(DAG)。如是(不存在回路),返回true;否则返回false。图的存储结构采用邻接表。将其加入到ADT中。注意:DG(.原创 2021-05-25 19:35:19 · 2090 阅读 · 0 评论 -
14、二叉树:根到x的路径
代码:// tree.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <cstring>#include <string>#include <vector>#...原创 2021-05-14 15:53:08 · 728 阅读 · 0 评论 -
16、二叉树:完全二叉树判断
题目:问题描述 :目的:使用C++模板设计并逐步完善二叉树的抽象数据类型(ADT)。内容:(1)请参照链表的ADT模板,设计二叉树并逐步完善的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。)注意:二叉树ADT的基本操作的算法设计很多要用到递归的程序设计方法。(2)基本操作16:在二叉树的二叉链表存储形式建立的基础上原创 2021-05-14 15:03:17 · 468 阅读 · 0 评论 -
10、二叉树:重载运算符==
思路:如果A指针的左孩子和右孩子的空、非空状态和元素与B的相同则继续递归否则修改标记变量。// tree.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <cstring>#inclu原创 2021-05-11 15:17:16 · 404 阅读 · 0 评论 -
9、链队列(带头结点)模板简单应用算法设计:长整数加法计算
题目大意:简单的模拟高精度解题思路:就是注意特判。进位和退位。建议加法=》大+小减法=》大-小(符号后期特判)代码:#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <cstring>#include <string>#include &l原创 2021-04-28 16:45:02 · 709 阅读 · 0 评论 -
5、一元多项式的加/减法运算
问题大意 :假设2个稀疏一元多项式分别由带头结点的有序单链表A和B存储(指数项递增有序)。现要求设计一个算法,实现稀疏一元多项式的加减法计算。要求使用A和B的原存储空间(运算后B不再存在,A链表中保存结果多项式)。输入中的单链表的长度不得在计算算法中利用,仅作为建表使用。注意:加/减法计算后,如某一项的结果系数为0,则该项要从多项式链表中删除。...原创 2021-04-28 16:41:59 · 836 阅读 · 0 评论 -
8、顺序栈ADT模板简单应用算法设计:迷宫问题
问题描述 :目的:使用C++模板设计顺序栈的抽象数据类型(ADT)。并在此基础上,使用顺序栈ADT的基本操作,设计并实现简单应用的算法设计。内容:(1)请参照顺序表的ADT模板,设计顺序栈的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的顺序表ADT原型文件,自行设计顺序栈的ADT。)(2)ADT的简单应用:使用该ADT设计并实现若干应用顺序栈的算法设计。..原创 2021-03-17 16:44:18 · 820 阅读 · 0 评论 -
7、顺序栈ADT模板简单应用算法设计:应用后缀式进行二元表达式四则运算
解题思路:这道题目的核心就是后缀表达式如何计算。原始的后缀表达式:10 20 * 30 40 3 / - 5 * +原则:从左到右,遇到数字就进栈。遇到操作符就弹出两个数字A、B按弹出先后进行计算,计算结果压入栈中。这里默认数列的左侧是栈底,右侧是栈顶,懒得画图了。1、stack:10 202、*3、stack:2004、stack:200 30 40 35、/6、stack:200 30 13.3333337、-8、stack:200 16.66667.原创 2021-03-16 18:44:29 · 304 阅读 · 0 评论 -
6、顺序栈:中缀式转换后缀式
解题思路:见代码#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <cstring>#include <string>#include <vector>#include <queue>#include <sstream>原创 2021-03-15 20:29:12 · 428 阅读 · 0 评论 -
4、K 个一组翻转链表
题目大意:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能.原创 2021-03-13 21:48:28 · 119 阅读 · 0 评论 -
3、重排链表
题目大意:给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.解题思路将后半截的地址存在栈里原创 2021-03-13 13:01:41 · 115 阅读 · 0 评论 -
2、长整数加法运算
出这题目的人就应该拖出去爆莎。说明:由于A和B输出时需要从头至尾遍历,而做加法时需要从尾至头遍历,因此使用双向链表存储。可以从长整数的低位开始拆分(4位为一组,即不超过9999的非负整数),依次存放在链表的每个结点的数据域中;头结点的数据域存放正负数标志(正数或0:1,负数:-1)。这就是一个简单的高精度加减法运算,要是说复杂也就仅仅在多位一起计算上增加了一点点。但是玄妙的地方在于出题人要用双链表???链表的优点在于中间位置插入和删除,虽然说使用链表可以节约最后翻转数字的操作时.原创 2021-03-07 17:24:16 · 934 阅读 · 0 评论 -
1、圆桌问题
思路:这道题目的本质就是模拟。但是难度主要在于删除人之后,人的总数发生了变化,需要进行维护。可以借助vector来进行维护,vector自带的erase函数能够删除一个元素并把后面的元素自动的往前挪动。这样子先把一个vector赋值为1,2,3,4,5……然后进行模拟,剩下2,4,5……(举例子)是好人。然后1,2,3,4……如果是好人的位置就输出G,否则为B。代码:#include <iostream>#include <cstdio>#inclu原创 2021-03-06 10:29:16 · 598 阅读 · 0 评论