数据结构
文章平均质量分 75
China-Rookie-LSJ
这个作者很懒,什么都没留下…
展开
-
是否完全二叉搜索树 (30 分)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO。输入样例1:938 45 42 24 58 30 6转载 2022-04-04 19:41:43 · 256 阅读 · 1 评论 -
2-1 是否同一棵二叉搜索树 (35分)
2-1 是否同一棵二叉搜索树 (35分)给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后L行原创 2020-12-02 21:42:46 · 444 阅读 · 2 评论 -
6-2 邻接表存储图的广度优先遍历 (20分)
6-2 邻接表存储图的广度优先遍历 (20分)试实现邻接表存储图的广度优先遍历。函数接口定义:void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) );其中LGraph是邻接表存储的图,定义如下:/* 邻接点的定义 */typedef struct AdjVNode *PtrToAdjVNode; struct AdjVNode{ Vertex AdjV; /* 邻接点下标 */ PtrToAdjVNo原创 2020-11-25 23:33:26 · 839 阅读 · 1 评论 -
7-2 树种统计 (20分)
7-2 树种统计 (20分)随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。输入格式:输入首先给出正整数N(≤105 ),随后N行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过30个英文字母和空格组成(大小写不区分)。输出格式:按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位。输入样例:29Red AlderAshAspenBasswoodAsh原创 2020-11-25 23:25:14 · 756 阅读 · 0 评论 -
6-1 邻接矩阵存储图的深度优先遍历 (20分)
6-1 邻接矩阵存储图的深度优先遍历 (20分)试实现邻接矩阵存储图的深度优先遍历。函数接口定义:void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );其中MGraph是邻接矩阵存储的图,定义如下:typedef struct GNode *PtrToGNode;struct GNode{ int Nv; /* 顶点数 */ int Ne; /* 边数 */ WeightType G[MaxVerte原创 2020-11-19 14:42:19 · 1020 阅读 · 0 评论 -
7-3 顺序存储的二叉树的最近的公共祖先问题 (20分)
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或原创 2020-11-17 23:23:14 · 1543 阅读 · 0 评论 -
7-1 树的同构 (20分)
7-1 树的同构 (20分)给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写原创 2020-11-15 23:14:26 · 705 阅读 · 0 评论 -
3-6 银行业务队列简单模拟 (20分)
3-6 银行业务队列简单模拟 (20分)设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。输入格式:输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。原创 2020-11-08 23:37:07 · 403 阅读 · 0 评论 -
3-5 单链表分段逆转 (20分)
3-5 单链表分段逆转 (20分)给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4;如果 K=4,则应该得到 4→3→2→1→5→6。函数接口定义:void K_Reverse( List L, int K );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /*原创 2020-11-08 16:59:38 · 3314 阅读 · 0 评论 -
3-4 双端队列 (20分)
3-4 双端队列 (20分)双端队列(deque,即double-ended queue的缩写)是一种具有队列和栈性质的数据结构,即可以(也只能)在线性表的两端进行插入和删除。若以顺序存储方式实现双端队列,请编写例程实现下列操作:Push(X,D):将元素X插入到双端队列D的头;Pop(D):删除双端队列D的头元素,并返回;Inject(X,D):将元素X插入到双端队列D的尾部;Eject(D):删除双端队列D的尾部元素,并返回。函数接口定义:bool Push( ElementType原创 2020-11-08 16:12:19 · 537 阅读 · 0 评论 -
3-3 另类循环队列 (20分)
3-3 另类循环队列 (20分)如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。函数接口定义:bool AddQ( Queue Q, ElementType X );ElementType DeleteQ( Queue Q );其中Queue结构定义如下:typedef int Position;typedef struct QNode *PtrToQNode;struct QNode原创 2020-11-08 16:01:59 · 1061 阅读 · 0 评论 -
3-2 数组元素的区间删除 (20分)
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-11-08 15:44:30 · 1296 阅读 · 0 评论 -
3-1 Deque (20分)
3-1 Deque (20分)A “deque” is a data structure consisting of a list of items, on which the following operations are possible:Push(X,D): Insert item X on the front end of deque D.Pop(D): Remove the front item from deque D and return it.Inject(X,D): Inser原创 2020-11-08 14:29:35 · 256 阅读 · 0 评论 -
4-15 根据后序和中序遍历输出先序遍历 (15分)
4-15 根据后序和中序遍历输出先序遍历 (15分)本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。输入格式:第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。输出格式:在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:Preorde原创 2020-11-07 16:45:58 · 448 阅读 · 0 评论 -
4-14 还原二叉树 (15分)
4-14 还原二叉树 (15分)给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5#include<bits/stdc++.h>using namespace std;typedef struct原创 2020-11-07 16:38:38 · 353 阅读 · 0 评论 -
1-9 最长连续递增子序列 (20分)
1-9 最长连续递增子序列 (20分)给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。输入格式:输入第1行给出正整数n(≤105);第2行给出n个整数,其间以空格分隔。输出格式:在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。输入样例:151 9 2 5 7 3 4 6 8 0 11 15 17 17 10输出样例:3 4 6 8原创 2020-11-07 14:56:38 · 274 阅读 · 0 评论 -
1-8 数组循环左移 (20分)
1-8 数组循环左移 (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-07 14:30:06 · 486 阅读 · 0 评论 -
1-7 两个有序链表序列的交集 (20分)
1-7 两个有序链表序列的交集 (20分)已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 2 5 -12 4 5 8 10 -1输出样例:2 5思路:用数组代替链表,求交集无非就是找出两个数组中相等的原创 2020-11-07 14:23:33 · 469 阅读 · 0 评论 -
4-13 先序输出叶结点 (10分)
4-13 先序输出叶结点 (10分)本题要求按照先序遍历的顺序输出给定二叉树的叶结点。函数接口定义:void PreorderPrintLeaves( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};函数Preorder原创 2020-11-04 21:31:04 · 420 阅读 · 0 评论 -
4-12 求二叉树高度 (10分)
4-12 求二叉树高度 (10分)本题要求给定二叉树的高度。函数接口定义:int GetHeight( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};要求函数返回给定二叉树BT的高度值。裁判测试程序样例:#incl原创 2020-11-04 21:20:05 · 363 阅读 · 0 评论 -
4-11 Isomorphic (10分)
4-11 Isomorphic (10分)Two trees, T1 and T2, are isomorphic if T1 can be transformed into T2 by swapping left and right children of (some of the) nodes inT1. For instance, the two trees in Figure 1 are isomorphic because they are the same if the children of原创 2020-11-04 21:01:30 · 688 阅读 · 0 评论 -
数据结构练习题 1-6 求链式线性表的倒数第K项 (20分)
1-6 求链式线性表的倒数第K项 (20分)给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。输入格式:输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。输出格式:输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。输入样例:4 1 2 3 4 5 6 7 8 9 0 -1输出样例:7思路:水题一道,链表直接用头插法创建,输出倒数第K个,就直接输出正着第K个就好了AC代码:#incl原创 2020-11-01 22:56:39 · 344 阅读 · 0 评论 -
数据结构练习题 2-8 符号配对 (20分)
2-8 符号配对 (20分)#include<bits/stdc++.h>using namespace std;char kuohao[110],zuokuohao[110];int num1 = 0,num2 = 0;void output(char x){ if(x == '(') cout << "NO\n(-?" << endl; else if(x == '[') cout << "NO\n[-?" << endl原创 2020-10-31 14:55:38 · 487 阅读 · 0 评论 -
数据结构练习题 2-7 一元多项式求导 (20分)
2-7 一元多项式求导 (20分)#include<bits/stdc++.h>using namespace std;int main(){ ios::sync_with_stdio(false); int xishu,zhishu; int flag = 0; while(scanf("%d %d",&xishu,&zhishu)==2 && zhishu!=0){ if(flag++) cout << " ";原创 2020-10-17 14:59:26 · 526 阅读 · 0 评论 -
数据结构练习题 2-6 两个有序序列的中位数 (20分)
2-6 两个有序序列的中位数 (20分)#include<bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; int a[2*n]; for(int i = 0;i < 2*n;i++) cin >> a[i]; sort(a,a+2*n); cout << a[n-1];}原创 2020-10-17 14:43:42 · 358 阅读 · 0 评论 -
数据结构练习题 2-5 Two Stacks In One Array (20分)
Stack CreateStack( int MaxElements ){ Stack s; s = (Stack)malloc(sizeof(struct StackRecord)); s->Top1 = -1; s->Top2 = MaxElements; s->Array = (int *)malloc(MaxElements*sizeof(sizeof(int))); s->Capacity = MaxElements; return s;}int IsEm原创 2020-10-17 14:22:57 · 338 阅读 · 0 评论 -
数据结构练习题 2-3 链表拼接 (20分)
struct ListNode *head = NULL,*tmp,*prior; prior = (struct ListNode*)malloc(sizeof(struct ListNode)); head = prior; while(list1 != NULL && list2 != NULL){ tmp = (struct ListNode*)malloc(sizeof(struct ListNode)); if(list1->data < list2-&原创 2020-10-15 16:37:36 · 345 阅读 · 0 评论 -
数据结构练习题 2-1 Add Two Polynomials (20分)
2-1 Add Two Polynomials (20分)Write a function to add two polynomials. Do not destroy the input. Use a linked list implementation with a dummy head node. Note: The zero polynomial is represented by an empty list with only the dummy head node.Format of fun原创 2020-10-15 14:43:26 · 1912 阅读 · 0 评论