
数据结构
文章平均质量分 58
缘遇_
你想成为什么样的人,就去做什么样的事
展开
-
fill()和memset()初始化的区别
如果需要对数组中的某些元素赋予相同的值,常见的有两种方法,memset函数和fill函数,二者稍微有一些区别。memset()头文件为cstring函数格式为memset(数组名, 值, sizeof(数组名) );memset()只能赋值0或-1,不能赋值其他数字,而且是整个数组。这是因为 memset 是按字节赋值,即对每个字节赋同样的值。比如对int赋值,int 是四个字节,只有两种情况,全零和全一,0000是0的补码,1111是 -1的补码,不能表示其他数值。示例如下#include原创 2021-03-08 15:00:39 · 427 阅读 · 0 评论 -
【HBU】7-2 冒泡法排序 (30分)
题目描述将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。输入格式:输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。输出格式:在一行中输出冒泡排序法原创 2020-12-26 22:09:49 · 197 阅读 · 0 评论 -
【HBU】7-1 二分查找 (20分)
题目描述利用二分查找找出所给出的数在数组中的下标输入格式:第一行输入n和m表示数组有n个数据,m表示要对m个数进行查找输出格式:所有输出在一行完成,行末没有多余空格和多余回车。输入样例:5 51 2 3 4 51 2 3 4 5输出样例:0 1 2 3 4格外要注意mid=low+(high-low)/2,而不是mid = (low+high)/2,否则可能计算溢出;原因是int类型最大表示范围是2147483647如果输入的low和high都接近2147483647,两个数相原创 2020-12-26 22:08:12 · 646 阅读 · 0 评论 -
【HBU】2020树结构和图结构月测(选择题)
2-1我们用一个有向图来表示航空公司所有航班的航线。下列哪种算法最适合解决找给定两城市间最经济的飞行路线问题?(2分)A.深度优先搜索B.Kruskal算法C.拓扑排序算法D.Dijkstra算法DA图的遍历算法;B构造最小生成树;C拓补排序2-2下图为一个AOV网,其可能的拓扑有序序列为:A.ABCEDFB.ACBDEFC.ABCDFED.ABCEFDA拓扑排序只输出没有入度的点,输出后删除点,从删除A开始。B选项,DE出错;C选项,DE出错;D选项FD出错2-原创 2020-12-20 21:04:24 · 2423 阅读 · 0 评论 -
【HBU】树结构和图结构月测(判断题)
【HBU】树结构和图结构月测1-1存在一棵总共有2016个结点的二叉树,其中有16个结点只有一个孩子。F1-2将一棵完全二叉树存于数组中(根结点的下标为1)。则下标为23和24的两个结点是兄弟。F下标从1开始,2n与2n+1位兄弟1-3用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。F在邻接表中有两种节点结构,一种是顶点节点的结构,由顶点域和第一条邻接边的指针域构成;另一种是边节点结构,由邻接点域和指向下一条邻接边的指针域构成。所以用邻接表存储图所用的原创 2020-12-20 20:34:13 · 1519 阅读 · 2 评论 -
2020第13-15周练习
2-1下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是:A.B.C.D.B,该二叉树的后序遍历为dbac,。先判断节点是否有左右孩子,如果没有,就会有箭头指出,指向的规则是左前右后,比如:d左右孩子都没有,左前右后,d没有前驱,左箭头指NULL,后继为b,右箭头指向b,;b没有左孩子,左箭头指向b的前驱d, ac同理,故B2-2引人线索二叉树的目的的是( )。A.加快查找结点的前驱或后继的速度B.为了能在二叉树中方便地进行插人与侧除C.为了能方便地找到双亲D.使二原创 2020-12-14 23:30:54 · 2482 阅读 · 0 评论 -
2020第13-15周练习
1-1 一棵有124个结点的完全二叉树,其叶结点个数是确定的。T1-2 二叉树中序线索化后,不存在空指针域。F第一个节点无前驱,最后一个节点无后继,左前右后1-3 对N(≥2)个权值均不相同的字符构造哈夫曼树,则树中任一非叶结点的权值一定不小于下一层任一结点的权值。T权值越大编码长度越短,权值越小编码长度越长。节点所在层数越小编码长度越短,权值就越大1-4 哈夫曼编码是一种最优的前缀码。对一个给定的字符集及其字符频率,其哈夫曼编码不一定是唯一的,但是每个字符的哈夫曼码的长度一定是唯一的。F,如原创 2020-12-14 22:32:20 · 651 阅读 · 2 评论 -
【HBU】7-2 树种统计 (20分)
题目描述随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。输入格式:输入首先给出正整数N(≤10^5 ),随后N行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过30个英文字母和空格组成(大小写不区分)。输出格式:按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位。输入样例:29Red AlderAshAspenBasswoodAshBeechYell原创 2020-11-17 23:13:49 · 235 阅读 · 0 评论 -
【HBU】7-4 数组循环左移 (20分)
题目描述本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0 a1 ⋯an−1 )变换为(am ⋯an−1 a0 a1 ⋯am−1 )(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:输入第1行给出正整数n(≤100)和整数m(≥0);第2行给出n个整数,其间以空格分原创 2020-11-17 22:22:23 · 717 阅读 · 0 评论 -
【HBU】7-3 两个有序链表序列的交集 (20分)
题目描述已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 2 5 -12 4 5 8 10 -1输出样例:2 5将两个链表分别放进两个队列里,比较队首元素大小,如果相等则输出,再出队;如果不相等,将较大的那原创 2020-11-17 22:18:02 · 664 阅读 · 0 评论 -
【HBU】7-1 求链式线性表的倒数第K项 (20分)
题目描述给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。输入格式:输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。输出格式:输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。输入样例:4 1 2 3 4 5 6 7 8 9 0 -1输出样例:7本来很简单的一道题,想作为今晚愉快做题的开始,却没想到让我很生气。到现在也没有弄明白怎么回事。刚开始我用的是if(t == -1) brea原创 2020-11-17 21:57:09 · 1223 阅读 · 4 评论 -
【HBU】7-3 顺序存储的二叉树的最近的公共祖先问题 (20分)
题目描述设顺序存储的二叉树中有编号为i和j的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。输入格式:输入第1行给出正整数n(≤1000),即顺序存储的最大容量;第2行给出n个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树);第3行给出一对结点编号i和j。题目保证输入正确对应一棵二叉树,且1≤i,j≤n。输出格式:如果i或j对应的是空结点,则输出ERROR: T[x] is NULL,其中x是i或j中先发现错误的那个编号;否则在一行中输出编号为原创 2020-11-16 21:38:59 · 1046 阅读 · 0 评论 -
【天梯赛】L2-011 玩转二叉树 (25分)
题目描述给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:71 2 3 4 5 6 74 1 3 2 6 5 7输出样例:原创 2020-11-12 23:06:30 · 420 阅读 · 0 评论 -
【天梯赛】L2-006 树的遍历 (25分)(层序遍历)
题目描述给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4 1 6 3 5 7 2#include <iostream>原创 2020-11-12 22:31:11 · 178 阅读 · 0 评论 -
【HBU】4-14 还原二叉树 (15分)
题目描述给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5两个知识点,根据前序、中序遍历还原二叉树;求二叉树的高度。可以参看视频讲解 浙江大学-数据结构#include <iostream>us原创 2020-11-12 22:29:02 · 229 阅读 · 0 评论 -
【HBU】3-9 堆栈模拟队列 (20分)
题目描述设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:int IsFull(Stack S):判断堆栈S是否已满,返回1或0;int IsEmpty (Stack S ):判断堆栈S是否为空,返回1或0;void Push(Stack S, ElementType item ):将元素item压入堆栈S;ElementType Pop(Stack S ):删除并返回S的栈顶元素。实现队列的操作,即入队void AddQ(E原创 2020-10-29 15:11:35 · 265 阅读 · 0 评论 -
1-4 列车厢调度 (25分)
题目描述 1 ====== <--移动方向 / 3 ===== \ 2 ====== -->移动方向 大家或许在某些数据结构教材上见到过“列车厢调度问题”(当然没见过也不要紧)。今天,我们就来实际操作一下列车厢的调度。对照上方的ASCII字符图,问题描述如下:有三条平行的列车轨道(1、2、3)以及1-3和2-3两段连接轨道。现有一列车厢停在1号轨道上,请利用两条连接轨道以及3号轨道,将车厢按照要求的顺序转原创 2020-10-24 19:52:09 · 267 阅读 · 0 评论 -
3-2 数组元素的区间删除 (20分)
题目描述给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。函数接口定义:int Delete( int A[], int L, int minA, int maxA );其中A是整型数组,存储原始线性表的元素;L是表长,即A中元素的个数;minA和maxA分别为待删除元素的值域的下、上界。函数Delete应将A中所有值大于minA而且小于maxA的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,最后原创 2020-10-20 22:01:24 · 136 阅读 · 0 评论 -
3-6 银行业务队列简单模拟 (20分)附详细测试点
题目描述设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。输入格式:输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。输出格式:按业务处理完成的顺原创 2020-10-14 19:13:47 · 4315 阅读 · 0 评论 -
2-10 出栈序列的合法性 (20分)
题目描述给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, …, N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5、N=7,则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 },但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。输入格式:输入第一行给出 3 个不超过 1000 的正整数:M(堆栈最大容量)、N(入栈元素个数)、K(待检查的出栈序列个数)。最后 K 行,每行给出 N 个数字的出栈序列。所有同行数字以空格间隔。输出格式原创 2020-10-13 22:21:37 · 1618 阅读 · 0 评论 -
2-7 一元多项式求导 (20分)
题目描述设计函数求一元多项式的导数。输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。输入样例:3 4 -5 2 6 1 -2 0输出样例:12 3 -10 1 6 0之前做过这道题,思路一看就有,但发现测试点2,4过不了,网搜了一下,发现这道题似乎少了条件,需要注意的一点是当特殊情况什么也没有是输出 “0 0”#include原创 2020-09-29 23:11:04 · 710 阅读 · 1 评论 -
2-6 两个有序序列的中位数 (20分)
题目描述已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0 ,A1 ,⋯,AN−1 的中位数指A(N−1)/2 的值,即第⌊(N+1)/2⌋个数(A0 为第1个数)。输入格式:输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。输出格式:在一行中输出两个输入序列的并集序列的中位数。输入样例1:51 3 5 7 92 3 4 5 6输出样原创 2020-09-29 22:52:23 · 379 阅读 · 1 评论 -
1-5 线性表元素的区间删除 (20分)
题目描述给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。函数接口定义:List Delete( List L, ElementType minD, ElementType maxD );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; P原创 2020-09-26 21:48:50 · 135 阅读 · 0 评论 -
1-1 顺序表操作集 (20分)
函数接口定义:List MakeEmpty(); Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAX原创 2020-09-26 21:47:21 · 101 阅读 · 0 评论 -
1-4 数组元素的区间删除 (20分)
题目描述给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。函数接口定义:int Delete( int A[], int L, int minA, int maxA );其中A是整型数组,存储原始线性表的元素;L是表长,即A中元素的个数;minA和maxA分别为待删除元素的值域的下、上界。函数Delete应将A中所有值大于minA而且小于maxA的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,最后原创 2020-09-26 17:38:06 · 183 阅读 · 0 评论