- 博客(102)
- 资源 (13)
- 收藏
- 关注
原创 3 寻找大富翁 (40 分)
胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人。假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁。 输入格式: 输入首先给出两个正整数N(≤10 6 )和M(≤10),其中N为总人数,M为需要找出的大富翁数;接下来一行给出N个人的个人资产值,以百万元为单位,为不超过长整型范围的整数。数字间以空格分隔。 输出格式: 在一行内按非递增顺序输出资产排前M位的大富翁的个人资产值。数字间以空格分隔,但结尾不得有多余空格。 输入样例: 8 3 8 12 7 3 20 9
2022-03-14 20:48:51
164
原创 6-28 冒泡排序 (30 分)
编程实现冒泡排序函数。void bubbleSort(int arr[], int n);。其中arr存放待排序的数据,n为数组长度(1≤n≤1000)。 函数接口定义如下: /* 对长度为n的数组arr执行冒泡排序 */ void bubbleSort(int arr[], int n); 请实现bubbleSort函数,使排序后的数据从小到大排列。 裁判测试程序样例: #include <stdio.h> #define N 1000 int arr[N]; /* 对长度为n的数组arr执行
2022-03-14 20:48:08
534
原创 6-27 有序数组的插入 (30 分)
本题要求将任一给定元素插入从大到小排好序的数组中合适的位置,以保持结果依然有序。 函数接口定义: bool Insert( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode List; struct LNode { ElementType Data[MAXSIZE]; Position Last; / 保存线性表中最后一个元素的位置 */ }; L是用户传入的一个线性表,其中ElementTyp
2022-03-14 20:47:28
179
原创 6-25 线性探测法的查找函数 (50 分)
试实现线性探测法的查找函数。 函数接口定义: Position Find( HashTable H, ElementType Key ); 其中HashTable是开放地址散列表,定义如下: #define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 / typedef int ElementType; / 关键词类型用整型 / typedef int Index; / 散列地址类型 / typedef Index Position; /
2022-03-14 20:46:17
294
原创 6-24 二分查找 (50 分)
本题要求实现二分查找算法。 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode List; struct LNode { ElementType Data[MAXSIZE]; Position Last; / 保存线性表中最后一个元素的位置 */ }; L是用户传入的一个线性表,其中ElementType元素可以通过>、==、&l
2022-03-14 20:45:15
172
原创 7-1 列出连通集 (25 分)
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。 输入格式: 输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。 输出格式: 按照"{ v 1 v 2 … v k }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。 输入样例: 8 6 0 7 0 1
2022-03-14 20:44:26
295
原创 6-9 Topological Sort (25 分)
Write a program to find the topological order in a digraph. Format of functions: bool TopSort( LGraph Graph, Vertex TopOrder[] ); where LGraph is defined as the following: typedef struct AdjVNode *PtrToAdjVNode; struct AdjVNode{ Vertex AdjV; PtrToAdjVNode
2022-03-14 20:43:31
116
原创 6-7 最小生成树(普里姆算法) (10 分)
试实现普里姆最小生成树算法。 函数接口定义: void Prim(AMGraph G, char u); 其中 G 是基于邻接矩阵存储表示的无向图,u表示起点 裁判测试程序样例: #include #define MVNum 10 #define MaxInt 32767 using namespace std; struct edge{ char adjvex; int lowcost; }closedge[MVNum]; typedef struct{ char vexs[MVNum]; int ar
2022-03-14 20:42:34
1100
原创 6-2 邻接表存储图的广度优先遍历 (20 分)
试实现邻接表存储图的广度优先遍历。 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是邻接表存储的图,定义如下: /* 邻接点的定义 */ typedef struct AdjVNode PtrToAdjVNode; struct AdjVNode{ Vertex AdjV; / 邻接点下标 / PtrToAdjVNode Next; / 指向下一个邻接点的指针 */ }; /* 顶点表头结
2022-03-13 21:04:35
425
原创 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[MaxVertexNum][MaxVertexNum]; / 邻接矩阵 / }; typedef Pt
2022-03-13 21:03:17
112
原创 7-15 列出叶结点 (15 分)
对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。 输入格式: 首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 “-”。编号间以 1 个空格分隔。 输出格式: 在一行中按规定顺序输出叶节点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。 输入样例: 8 1 - 0 - 2 7 5 - 4 6 输出样例: 4 1
2022-03-13 21:02:26
305
原创 7-13 还原二叉树 (15 分)
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。 输入格式: 输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。 输出格式: 输出为一个整数,即该二叉树的高度。 输入样例: 9 ABDFGHIEC FDHGIBEAC 输出样例: 5 #include <stdio.h> #include <stdlib.h> typedef char ElementType; typede
2022-03-13 21:01:48
114
原创 6-8 先序输出叶结点 (15 分)
本题要求按照先序遍历的顺序输出给定二叉树的叶结点。 函数接口定义: void PreorderPrintLeaves( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType Data; BinTree Left; BinTree Right; }; 函数PreorderPrintLeaves应按照先序遍历的顺序输出给定二叉树BT的叶结
2022-03-13 21:01:01
92
原创 6-7 二叉树的遍历 (20 分)
本题要求给定二叉树的4种遍历。 函数接口定义: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderTraversal( BinTree BT ); void LevelorderTraversal( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTree; str
2022-03-13 21:00:18
181
原创 6-6 求二叉树高度 (15 分)
本题要求给定二叉树的高度。 函数接口定义: int GetHeight( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType Data; BinTree Left; BinTree Right; }; 要求函数返回给定二叉树BT的高度值。 裁判测试程序样例: #include <stdio.h> #include <
2022-03-13 20:59:39
2794
原创 7-1 矩阵A乘以B (30 分)
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有R a 行、C a 列,B有R b 行、C b 列,则只有C a 与R b 相等时,两个矩阵才能相乘。 输入格式: 输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。 输出格式: 若输入的两个矩阵的规模是匹配的,
2022-03-13 20:58:40
174
原创 6-1 稀疏矩阵求和 (70 分)
本题实现稀疏矩阵的求和运算。 函数接口定义: int add_mat(elem a[],int t1,elem b[],int t2, elem c[]);//求a+b 其中 t1 和 t2 表示稀疏矩阵a的长度和稀疏矩阵b的长度,函数返回a+b的长度。 裁判测试程序样例: #include <stdio.h> #define M 10 //行 #define N 10 //列 typedef struct { int row, col; //行号、列号 int va
2022-03-13 20:57:55
887
原创 7-5 表达式转换 (18 分)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。 输入格式: 输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。 输出格式: 在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。 输入样例: 2+3*(7-4)+8/4 输出样例: 2 3 7 4 - * + 8 4 / + // 表达式转换 #
2022-03-13 20:56:53
219
原创 7-4 银行业务队列简单模拟 (15 分)
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。 输入格式: 输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。 输出格式: 按业务处理完成的顺序输出顾客
2022-01-29 16:37:20
220
原创 7-3 括号匹配 (15 分)
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。 输入格式: 输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。 输出格式: 如果括号配对,输出yes,否则输出no。 输入样例1: sin(10+20) 输出样例1: yes 输入样例2: {[}] 输出样例2: no #include<iostream> using namespace std; int main() {
2022-01-29 16:36:36
1092
原创 7-2 简单计算器 (13 分)
本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S 1 存放数字,另一个堆栈 S 2 存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作: 从 S 1 中弹出两个数字,顺序为 n 1 和 n 2 ; 从 S 2 中弹出一个运算符 op; 执行计算 n 2 op n 1 ; 将得到的结果压回 S 1 。 直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。 输入格式: 输入首先在
2022-01-29 16:34:31
498
原创 7-1 堆栈操作合法性 (15 分)
假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入S和X序列,判断该序列是否合法。 输入格式: 输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由S和X构成的序列。序列保证不为空,且长度不超过100。 输出格式: 对每个序列,在一行中输出YES如果该序列是合法的堆栈操作序列,或NO如果不是。 输入样
2022-01-29 16:33:48
178
原创 6-3 十进制转二进制(顺序栈设计和应用) (8 分)
设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制并输出。 函数接口定义: #define MaxSize 100 /* 栈最大容量 / int top; / 栈顶指针 / int mystack[MaxSize]; / 顺序栈 */ /*判栈是否为空,空返回true,非空返回false */ bool isEmpty(); /* 元素x入栈 */ void Push(int x); /* 取栈顶元素 */ int getTop(); /* 删除栈顶元素 */ void
2022-01-29 16:33:06
576
原创 6-2 在一个数组中实现两个堆栈 (8 分)
本题要求在一个数组中实现两个堆栈。 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag ); 其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下: typedef int Position; struct SNode { ElementType *Data; Position Top1
2022-01-29 16:32:19
446
原创 6-1 另类堆栈 (8 分)
在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满? 函数接口定义: bool Push( Stack S, ElementType X ); ElementType Pop( Stack S ); 其中Stack结构定义如下: typedef int Position; typedef struct SNode *PtrToSNode; struct SNode { ElementType Data; / 存储元素的数
2022-01-29 16:31:24
249
原创 7-8 最长连续递增子序列 (15 分)
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。 输入格式: 输入第1行给出正整数n(≤10 5 );第2行给出n个整数,其间以空格分隔。 输出格式: 在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。 输入样例: 15 1 9 2 5 7 3 4 6 8 0 11 15 17 17 10 输出样例: 3 4 6 8 // 最长连续递增子序列 #inclu
2022-01-29 16:29:25
100
原创 7-7 数组循环左移 (15 分)
本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a 0 a 1 ⋯a n−1 )变换为(a m ⋯a n−1 a 0 a 1 ⋯a m−1 )(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法? 输入格式: 输入第1行给出正整数n(≤100)和整数m(≥0);第2行给出n个整数,其间以空格分隔。 输出
2022-01-29 16:28:46
150
原创 7-2 两个有序链表序列的交集 (15 分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。 输出格式: 在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。 输入样例: 1 2 5 -1 2 4 5 8 10 -1 输出样例: 2 5 // 两个有序链表序列的交集 #include <stdio.h> #include <s
2022-01-29 16:27:58
273
原创 7-1 两个有序链表序列的合并 (15 分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。 输出格式: 在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。 输入样例: 1 3 5 -1 2 4 6 8 10 -1 输出样例: 1 2 3 4 5 6 8 10 #include <stdio.h> #include <
2022-01-24 18:21:27
164
原创 6-1 线性表元素的区间删除 (10 分)
给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。 函数接口定义: List Delete( List L, ElementType minD, ElementType maxD ); 其中List结构定义如下: typedef int Position; typedef struct LNode List; struct LNode { ElementType Data[MAXSIZE]; Position Last;
2022-01-24 18:20:20
300
原创 6-4 链表逆置 (10 分)
本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ListNode *reverse( struct ListNode *head ); 其中head是用户传入的链表的头指针;函数reverse将链表head逆置,并返回结果链表的头指针。 裁判测试程序样例: #include <stdio.h> #include &l
2022-01-24 18:19:41
267
原创 6-3 递增的整数序列链表的插入 (10 分)
本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性。 函数接口定义: List Insert( List L, ElementType X ); 其中List结构定义如下: typedef struct Node PtrToNode; struct Node { ElementType Data; / 存储结点数据 / PtrToNode Next; / 指向下一个结点的指针 / }; typedef PtrToNode List; / 定义单链表类型 */ L
2022-01-24 18:18:56
512
原创 6-2 删除单链表偶数节点 (10 分)
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ListNode *createlist(); struct ListNode *deleteeven( struct ListNode *head ); 函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链
2022-01-24 18:17:41
349
原创 6-25 线性探测法的查找函数 (50 分)
试实现线性探测法的查找函数。 函数接口定义: Position Find( HashTable H, ElementType Key ); 其中HashTable是开放地址散列表,定义如下: #define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 / typedef int ElementType; / 关键词类型用整型 / typedef int Index; / 散列地址类型 / typedef Index Position; /
2022-01-24 17:18:42
148
原创 6-24 二分查找 (50 分)
本题要求实现二分查找算法。 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode List; struct LNode { ElementType Data[MAXSIZE]; Position Last; / 保存线性表中最后一个元素的位置 */ }; L是用户传入的一个线性表,其中ElementType元素可以通过>、==、&l
2022-01-24 17:16:42
58
原创 3 寻找大富翁 (40 分)
胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人。假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁。 输入格式: 输入首先给出两个正整数N(≤10 6 )和M(≤10),其中N为总人数,M为需要找出的大富翁数;接下来一行给出N个人的个人资产值,以百万元为单位,为不超过长整型范围的整数。数字间以空格分隔。 输出格式: 在一行内按非递增顺序输出资产排前M位的大富翁的个人资产值。数字间以空格分隔,但结尾不得有多余空格。 输入样例: 8 3 8 12 7 3 20 9
2022-01-24 17:15:36
95
原创 6-28 冒泡排序 (30 分)
编程实现冒泡排序函数。void bubbleSort(int arr[], int n);。其中arr存放待排序的数据,n为数组长度(1≤n≤1000)。 函数接口定义如下: /* 对长度为n的数组arr执行冒泡排序 */ void bubbleSort(int arr[], int n); 请实现bubbleSort函数,使排序后的数据从小到大排列。 裁判测试程序样例: #include <stdio.h> #define N 1000 int arr[N]; /* 对长度为n的数组arr执行
2022-01-24 17:14:18
1386
原创 有序数组的插入
本题要求将任一给定元素插入从大到小排好序的数组中合适的位置,以保持结果依然有序。 函数接口定义: bool Insert( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode List; struct LNode { ElementType Data[MAXSIZE]; Position Last; / 保存线性表中最后一个元素的位置 */ }; L是用户传入的一个线性表,其中ElementTyp
2022-01-24 17:13:00
135
原创 打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。 给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。 输入格式: 输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。 输出格式: 首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。 输
2021-10-10 17:51:30
103
原创 ATM机类结构设计(二)
设计ATM仿真系统,具体要求参见作业说明。 OO作业9-1题目说明.pdf 输入格式: 每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下: 取款功能输入数据格式: 卡号 密码 ATM机编号 金额(由一个或多个空格分隔) 查询余额功能输入数据格式: 卡号 输出格式: ①输入错误处理 如果输入卡号不存在,则输出Sorry,this card does not exist.。 如果输入ATM机编号不存在,则输出Sorry,the ATM’s id is wrong.。 如果输入
2021-08-25 16:16:38
315
数组元素循环右移问题.cpp
2021-10-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人