
数据结构
一只幽灵飘过
(˃ ⌑ ˂ഃ )
展开
-
数据结构 期末考试 函数题 (PTA)~
6-1 求顺序表最大值 (10分)int GetMax(SqList L){ int i,maxx; for(i=0;i<L.length;i++){ if(maxx<L.elem[i]){ maxx=L.elem[i]; } } return maxx;}6-2 单链表逆置(*) (10分)void LListReverse(LLIST *list){ NODE *p, *q;原创 2021-01-10 13:00:06 · 1724 阅读 · 0 评论 -
数据结构 期末考试 编程题(PTA)~
为了考试罢了。7-1 求素数个数 (30分)AC代码7-2 两个有序链表合并(新表不含重复元素) (20分)AC代码我就是看set比较顺眼7-3 堆栈操作合法性 (20分)AC代码7-4 根据后序和中序遍历输出先序遍历 (25分)AC代码简化.省略二叉树7-5 哈夫曼编码 (30分)简化.省略哈夫曼树7-6 学生顺序表的建立 (10分)AC代码要是我知道测试点是什么连这几行都不想写7-7 求两个一元多项式的和 (20分)AC代码看map顺眼的很7-1 求素数个数 (30分)求素数的个数。本题要求编写一个原创 2021-01-10 12:16:41 · 3605 阅读 · 0 评论 -
7-3 悄悄关注 (25分) PTA
7-3 悄悄关注 (25分)新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能被其悄悄关注的人。输入格式:输入首先在第一行给出某用户的关注列表,格式如下:人数N 用户1 用户2 …… 用户N其中N是不超过5000的正整数,每个用户i(i=1, …, N)是被其关注的用户的ID,是长度为4位的由数字和英文字母组成的字符串,各项间以空格分隔。之后原创 2021-01-06 23:30:39 · 1222 阅读 · 0 评论 -
7-2 模拟EXCEL排序 (25分) PTA
7-2 模拟EXCEL排序 (25分)Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。输入格式:输入的第一行包含两个正整数N(≤105 ) 和C,其中N是纪录的条数,C是指定排序的列号。之后有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,保证没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开。输出格式:在N行中输出按要求排序后的结果,即:当C=1时,按学号递增排序;当C=2时,按姓名的非原创 2021-01-06 23:27:19 · 1259 阅读 · 0 评论 -
7-1 字符串的冒泡排序 (20分) PTA
7-1 字符串的冒泡排序 (20分)我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。输入格式:输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。输出格式:输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。输入样例:6 2bestcateastafreeday输出样例:bestaca原创 2021-01-06 23:24:32 · 1416 阅读 · 0 评论 -
7-2 愤怒的牛 (25分)
7-2 愤怒的牛 (25分)农夫约翰建造了一座有n间牛舍的小屋,牛舍排在一条直线上,第i间牛舍在xi 的位置,但是约翰的m头牛对小屋很不满意,因此经常互相攻击。约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其它牛尽可能远的牛舍。也就是要最大化最近的两头牛之间的距离。牛们并不喜欢这种布局,而且几头牛放在一个隔间里,它们就要发生争斗。为了不让牛互相伤害。John 决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是多少呢?输入格式:第一行用空格分隔的两个原创 2020-12-26 21:23:27 · 1614 阅读 · 0 评论 -
7-1 电话聊天狂人 (25分) PTA 数据结构
7-1 电话聊天狂人 (25分)给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。输入格式:输入首先给出正整数N(≤105 ),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。输出格式:在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。输入样例:413005711862 1358862583213505原创 2020-12-26 21:22:42 · 1661 阅读 · 0 评论 -
6-4 创建哈希表及查找(拉链法) (10分) PTA 数据结构
实现哈希表创建及查找算法,哈希函数使用除余法,用拉链法处理冲突。函数接口定义:void CreateHash(HashTable HT[],int n); //输入不大于m的n个不为0(0表示空值)的数,用拉链法解决冲突构造散列表float ASL(HashTable HT[]); //计算平均查找长度其中 HT 表示哈希表, n表示记录数。裁判测试程序样例:#include<iostream>using namespace std;#define P 13typedef原创 2020-12-26 21:13:26 · 2885 阅读 · 1 评论 -
6-3 有序数组的插入 (20分) PTA 数据结构
6-3 有序数组的插入 (20分)本题要求将任一给定元素插入从大到小排好序的数组中合适的位置,以保持结果依然有序。函数接口定义:bool Insert( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */原创 2020-12-26 21:11:08 · 6343 阅读 · 0 评论 -
6-2 线性探测法的查找函数 (20分) PTA 数据结构
试实现线性探测法的查找函数。函数接口定义:Position Find( HashTable H, ElementType Key );其中HashTable是开放地址散列表,定义如下:#define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */typedef int ElementType; /* 关键词类型用整型 */typedef int Index; /* 散列地址类型 */typedef Index Position;原创 2020-12-26 20:57:26 · 2902 阅读 · 0 评论 -
6-1 二分查找 (20分) PTA 数据结构
本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */};L是用户传入的一个线性表,其中ElementType元素可以原创 2020-12-26 20:47:21 · 1714 阅读 · 0 评论 -
7-2 哥尼斯堡的“七桥问题” (25分)
7-2 哥尼斯堡的“七桥问题” (25分)哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示。可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707—1783)最终解决了这个问题,并由此创立了拓扑学。这个问题如今可以描述为判断欧拉回路是否存在的问题。欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个无向图,问是否存在欧拉回路?输入格式:输入第一行给出两个正整数,分别是节点数N (1≤N≤原创 2020-12-16 18:20:43 · 1453 阅读 · 0 评论 -
PTA 7-1 旅游规划 (25分) 数据结构 Floyd
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中原创 2020-12-16 18:03:39 · 1200 阅读 · 0 评论 -
6-2 邻接表存储图的广度优先遍历 (20分) PTA 图论
试实现邻接表存储图的广度优先遍历。函数接口定义:void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) );其中LGraph是邻接表存储的图,定义如下:/* 邻接点的定义 */typedef struct AdjVNode *PtrToAdjVNode; struct AdjVNode{ Vertex AdjV; /* 邻接点下标 */ PtrToAdjVNode Next; /* 指向下一个邻接点的指针原创 2020-12-16 17:53:08 · 706 阅读 · 0 评论 -
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]; /* 邻原创 2020-12-16 17:48:12 · 2742 阅读 · 0 评论 -
7-4 哈夫曼编码 (30分)
给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给出一套编码,使得用此编码压缩原文可以得到最短的编码总长。然而哈夫曼编码并不是唯一的。例如对字符串"aaaxuaxz",容易得到字母 ‘a’、‘x’、‘u’、‘z’ 的出现频率对应为 4、2、1、1。我们可以设计编码 {‘a’=0, ‘x’=10, ‘u’=110, ‘z’=111},也可以用另一套 {‘a’=1, ‘x’=01, ‘u’=001, ‘z’=000},还可以用 {‘a’=0, ‘x’=11, ‘u’=100, ‘z’=101},原创 2020-12-04 15:45:34 · 2918 阅读 · 0 评论 -
7-3 树的遍历 (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<bits/stdc++.h>usi原创 2020-12-04 15:42:25 · 500 阅读 · 0 评论 -
7-2 玩转二叉树 (25分)
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:71 2 3 4 5 6 74 1 3 2 6 5 7输出样例:4 6 1原创 2020-12-04 15:41:09 · 1086 阅读 · 0 评论 -
7-1 根据后序和中序遍历输出先序遍历 (25分) PTA
本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。输入格式:第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。输出格式:在一行中输出Preorder: 以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:Preorder: 4 1 3 2 6 5 7AC代码#incl原创 2020-12-04 15:39:55 · 883 阅读 · 0 评论 -
6-3 先序输出叶结点 (15分)
本题要求按照先序遍历的顺序输出给定二叉树的叶结点。函数接口定义:void PreorderPrintLeaves( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};函数PreorderPrintLeaves应按照先序遍历的顺原创 2020-12-04 15:34:03 · 1273 阅读 · 0 评论 -
6-2 二叉树的遍历 (25分) PTA 函数题
本题要求给定二叉树的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;st原创 2020-12-04 15:30:17 · 1718 阅读 · 1 评论 -
6-1 求二叉树高度 (20分) PTA 函数题
本题要求给定二叉树的高度。函数接口定义:int GetHeight( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};要求函数返回给定二叉树BT的高度值。裁判测试程序样例:#include <stdio.h>原创 2020-12-04 15:25:52 · 776 阅读 · 0 评论 -
7-2 堆栈操作合法性 (20分) PTA
假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入S和X序列,判断该序列是否合法。输入格式:输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由S和X构成的序列。序列保证不为空,且长度不超过100。输出格式:对每个序列,在一行中输出YES如果该序列是合法的堆栈操作序列,或NO如果不是。输入样原创 2020-10-31 17:19:20 · 3131 阅读 · 0 评论 -
7-1 银行业务队列简单模拟 (25分) PTA
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。输入格式:输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。输出格式:按业务处理完成的顺序输出顾客原创 2020-10-31 17:15:10 · 2220 阅读 · 0 评论 -
6-4 十进制转二进制(顺序栈设计和应用) (10分) PTA 函数题
设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制并输出。函数接口定义:#define MaxSize 100 /* 栈最大容量 */int top; /* 栈顶指针 */int mystack[MaxSize]; /* 顺序栈 *//*判栈是否为空,空返回true,非空返回false */bool isEmpty();/* 元素x入栈 */void Push(int x);/* 取栈顶元素 */int getTop();/* 删除栈顶元素 */void Pop原创 2020-10-31 17:06:52 · 5090 阅读 · 0 评论 -
6-3 jmu-ds-舞伴问题 (20分) PTA 函数题
假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你需要用队列操作实现上述算法。请完成下面5个函数的操作。函数接口定义:int QueueLen(SqQueue Q);//队列长度 int EnQueue(SqQueue &Q, Person e);//加入队列 int QueueEmpty(SqQueue &Q);//队列是否为空原创 2020-10-30 15:48:27 · 3950 阅读 · 0 评论 -
PTA 7-3 两个有序链表合并(新表不含重复元素) (20分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 要求S3中没有重复元素。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出合并后新的非降序链表,要求链表中没有重复元素。数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:在这里给出一组输入。例如:1 3 3 5 8 -12 3 4 6 8 10 -1输出样例:在这里给出相应的原创 2020-10-11 15:00:38 · 2478 阅读 · 0 评论 -
PTA 7-4 在有序链表中插入数据 (20分)
给定一批严格递增排列的整型数据,给定一个x,若x不存在,则插入x,要求插入后保持有序。存在则无需任何操作。输入格式:输入有两行: 第一个数是n值,表示链表中有n个数据。后面有n个数,分别代表n个数据。 第二行是要插入的数。输出格式:输出插入后的链表数据,以空格分开。行末不能有多余的空格。输入样例1:在这里给出一组输入。例如:5 1 3 6 9 114输出样例1:在这里给出相应的输出。例如:1 3 4 6 9 11输入样例2:在这里给出一组输入。例如:5 1 3 6 9 11原创 2020-10-11 14:51:57 · 11273 阅读 · 2 评论 -
PTA 7-2 求两个一元多项式的和 (20分)
7-2 求两个一元多项式的和 (20分)求两个一元多项式的和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分1行,分别以指数递降方式输出和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。输入样例1:4 3 4 -5 2 6 1 -2 03 5 20 -7 4 3 1输出样例1:5 20 -4 4 -5 2 9 1原创 2020-10-11 14:33:00 · 5332 阅读 · 2 评论 -
PTA 7-1 学生顺序表的建立 (10分)
完成对一个顺序表的建立,表中的每个元素是同学们的学号、姓名和三门课程的成绩,输入5个同学的信息,然后显示在屏幕上。(要求利用顺序表的基本操作)输入格式:首先收入学生人数5,然后依次输入5个学生的学号、姓名和三门课的成绩输出格式:输入5个学生的学号、姓名和三门课的成绩输入样例:5 01 张三 89 89 89 02 李四 90 90 90 03 王五 89 89 89 04 钱六 97 97 97 05 赵倩 90 90 90输出样例:1 张三 89.0 89.0 89.0 2 李四 90.0原创 2020-10-11 14:11:04 · 3412 阅读 · 1 评论 -
6-3 单链表统计正数个数 (6分)
本题要求实现一个函数,返回带头结点的单链表中正整数的个数。函数接口定义:int PositiveInt(LinkList L);L是带头结点的单链表的头指针,函数PositiveInt返回L中正整数的个数。如果单链表为空,返回0。其中LinkList结构定义如下:typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;裁判测试程序样例:#include <stdio.h>原创 2020-10-11 11:51:44 · 6577 阅读 · 0 评论 -
PTA 6-2 单链表逆置(*) (10分)
6-2 单链表逆置(*) (10分)已知单链表结点结构定义如下:typedef struct _NODE_{ int data; struct _NODE_ *next;} NODE;说明:data 为数据域,next 为指针域。单链表的结构定义如下:typedef struct{ int length; NODE *head;} LLIST;说明:length 为单链表的长度,head 为头指针。请编写函数,将带头结点的单链表逆置。函数原型vo原创 2020-10-11 11:45:11 · 7083 阅读 · 0 评论 -
PTA 6-1 求顺序表最大值 (10分)
本题要求实现一个函数,要求返回顺序表的最大值,空表返回0。题目保证顺序表中所有元素都为正整数。函数接口定义:int GetMax(SqList L);其中SqList结构定义如下:typedef struct{ ElemType *elem; int length; }SqList;裁判测试程序样例:#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5typedef int ElemType;ty原创 2020-10-11 11:34:29 · 7219 阅读 · 0 评论 -
PTA 7-2 求素数个数 (30分)
7-2 求素数个数 (30分)求素数的个数。本题要求编写一个程序,求1~n的素数个数。 要求至少给出两种解法,对于相同的n,给出这两种解法的结果,通过相关数据进行测试,目的是通过对比同一问题不同解法的绝对执行时间体会如何设计“好”的算法。输入格式:输入在一行中给出1个整数n(<= 10 000 000)。输出格式:对每一组输入,在一行中输出1~n的素数个数。输入样例1:5输出样例1:3输入样例2:14输出样例2:6AC代码#include <iostream原创 2020-10-11 11:31:48 · 13720 阅读 · 15 评论 -
PTA 7-1 求最小值和次小值 (25分)
本题目要求读入n个整数,要求用最少的比较次数,输出它们的最小值和次小值。例如,对于12 13 1 10 34 1这6个数,最小值为1,次小值为10。输入格式:输入有两行。第一行为整数个数n(≤1 000 000),第二行给出n个以空格分隔的整数。输出格式:对每一组输入,在一行中输出最小值和次小值,中间以一个空格分隔,但行尾没有多余空格。如果输入数据不足两个,则输出“Invalid Input”。如果没有次小值,则输出“There is no second smallest element”。输入原创 2020-10-11 11:19:17 · 3061 阅读 · 0 评论