数据结构和算法
涵小呆
这个作者很懒,什么都没留下…
展开
-
PTA 7-10 公路村村通 (30分)
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成本。如果输入数据...原创 2020-03-09 21:56:58 · 4335 阅读 · 2 评论 -
PTA 7-6 列出连通集 (25分)
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{v1v2...v...原创 2020-02-16 15:37:46 · 578 阅读 · 0 评论 -
PTA 7-4 是否同一棵二叉搜索树 (25分)
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N(≤10)和L,分别是每个序列插入元素的个数和需要检...原创 2020-02-05 18:31:10 · 998 阅读 · 0 评论 -
数据结构与算法之二叉搜索树
二叉搜索树二叉搜索树又称为二叉排序树,首先二叉搜索树是一棵二叉树,所谓二叉树,就是"任意节点最多允许两个子节点",这两个子节点称为左右子节点。性质:若左子树非空,则左子树上的所有节点均小于其根节点 若右子树非空,则右子树上的所有节点均大于其根节点即任意节点的值一定大于其左子树中的每一个节点的值,并小于右子树中的每一个节点的值。换句话说,中序遍历二叉搜索树得到的序列为从小到大排序的有...原创 2020-02-05 16:51:21 · 228 阅读 · 0 评论 -
PTA 7-31 笛卡尔树 (25分)
笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字满足优先队列(不妨设为最小堆)的顺序要求,即该结点的K2值比其子树中所有结点的K2值小。给定一棵二叉树,请判断该树是否笛卡尔树。输入格式:输入首先给出正整数N(≤1000),为树中结点的个数。随后N行,每行给出一个...原创 2020-02-05 12:44:48 · 904 阅读 · 0 评论 -
PTA 7-28 搜索树判断 (25分)
对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树。现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。输入格式:输入的第一行包含一个正整数N(≤1000),第二行包含N个整数...原创 2020-02-05 09:49:08 · 3162 阅读 · 0 评论 -
PTA 7-23 还原二叉树 (25分)
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5根据前序序列可以找到树根,然后根...原创 2020-02-04 16:17:31 · 675 阅读 · 0 评论 -
PTA 7-3 树的同构 (25分)
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N(≤...原创 2020-02-04 12:41:18 · 1195 阅读 · 1 评论 -
PTA 7-27 家谱处理 (30分)
人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究。实验中,使用计算机处理家谱。为了实现这个目的,研究人员将家谱转换为文本文件。下面为家谱文本文件的实例:John Robert Frank Andrew Nancy David家谱文本文件中,每一行包含一个人的名字。第一行中的名字是这个家族最早的祖先。家谱仅包含最早祖先的后代,而他们的丈...原创 2020-02-03 20:26:17 · 2215 阅读 · 0 评论 -
PTA 7-3 互评成绩 (20 分)
学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。输入格式:输入第一行给出3个正整数N(3<N≤104,学生总数)、k(3≤k≤10,每份作业的评审数)、M(≤20,需要输出的学生数)。随后N行,每行给出一份作业得...原创 2019-06-05 08:36:49 · 1346 阅读 · 0 评论 -
PTA 7-1 整型关键字的散列映射 (20 分)
给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。输入格式:输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。输出格式:在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。输入样...原创 2019-06-05 08:35:59 · 1941 阅读 · 0 评论 -
PTA 7-3 稀疏矩阵加法 (20 分)
给定两个矩阵A和B,求其和矩阵C=A+B。输入格式:第一行包含两个数Row和Col,分别表示矩阵的行数和列数,A和B的维度是一致的。第二行只有一个数N1,表示接下来要输入的A中的非零元素的个数。接下来是N1行,每一行都是ijA[i,j]这样的形式,表示的A中第i行第j列的元素A[i,j],为了与大多数编程语言保持一致,它们都是从零开始的,也就是说下标的有效范围是[...原创 2019-05-29 16:48:59 · 3363 阅读 · 0 评论 -
PTA 7-2 逆波兰表达式求值 (20 分)
逆波兰表示法是一种将运算符(operator)写在操作数(operand)后面的描述程序(算式)的方法。举个例子,我们平常用中缀表示法描述的算式(1 + 2)*(5 + 4),改为逆波兰表示法之后则是1 2 + 5 4 + *。相较于中缀表示法,逆波兰表示法的优势在于不需要括号。请输出以逆波兰表示法输入的算式的计算结果。输入格式:在一行中输入1个算式。相邻的符号(操作数或运算符)用1个空...原创 2019-05-29 16:46:33 · 3223 阅读 · 0 评论 -
PTA 7-1 jmu-ds-最长数字序列 (20 分)
原题如下:输入一个字符串,求该字符串中最长连续数字序列出现的起始位置及其长度。输入格式:输入一个字符串,可包含空格。输出格式:输出内容:最长数字序列起始位置和长度空格隔开。输出尾部不能有空格。输入空串,输出"NULL"输入样例:123ab12345a输出样例:5 5这个题的意思其实只是找出字符串中最长的数字序列即可,而数字序列不一定是连续的.........原创 2019-05-29 16:45:00 · 5462 阅读 · 1 评论 -
PTA 7-4 串的模式匹配 (25 分)
给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:数据0:小规模字符串,测试基本正确性; 数据1:随机数据,String 长度为105,Pat...原创 2019-05-31 15:34:57 · 8640 阅读 · 1 评论 -
PTA 7-1 一元多项式的乘法与加法运算 (20 分)
设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。输入样例:4 3 4 -5 2...原创 2019-05-24 07:45:54 · 1448 阅读 · 0 评论 -
PTA 7-5 出栈序列的合法性 (25 分)
给定一个最大容量为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(入栈元素个数)...原创 2019-05-24 07:48:01 · 5280 阅读 · 0 评论 -
PTA 7-4 求前缀表达式的值 (25 分)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。输入格式:输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。输出格式:输出前缀表达式的运算结...原创 2019-05-24 07:47:43 · 2238 阅读 · 0 评论 -
PTA 7-2 jmu-ds-顺序表区间元素删除 (15 分)
若一个线性表L采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1)。输入格式:三行数据,第一行是顺序表的元素个数,第二行是顺序表的元素,第三行是x和y。输出格式:删除元素值在[x,y]之间的所有元素后的顺序表。输入样例:105 1 9 10 67 12 8 33 6 23 1...原创 2019-05-22 08:05:22 · 5342 阅读 · 0 评论 -
PTA 7-3 两个有序序列的中位数 (25 分)
已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0,A1,⋯,AN−1的中位数指A(N−1)/2的值,即第⌊(N+1)/2⌋个数(A0为第1个数)。输入格式:输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。输出格式:在一行中输...原创 2019-05-22 08:06:33 · 1764 阅读 · 0 评论 -
PTA 7-4 最长连续递增子序列 (20 分)
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。输入格式:输入第1行给出正整数n(≤105);第2行给出n个整数,其间以空格分隔。输出格式:在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。输入样例:151 9 ...原创 2019-05-22 08:07:47 · 3522 阅读 · 0 评论 -
PTA 7-5 求集合交集 (20 分)
求整数集合A与整数集合B的交集。输入格式:输入有三行: 第一行是A和B的元素个数m和n; 第二行是集合A的m个元素; 第三行是集合A的n个元素。输出格式:输出交集的所有元素(按照在A集合出现的顺序输出,最后一个输出后面没有空格)。输入样例:在这里给出一组输入。例如:3 410 9 29 10 8 0输出样例:在这里给出相应的输出。例如:10 9...原创 2019-05-22 08:09:13 · 12073 阅读 · 2 评论 -
PTA 7-1 单链表的创建及遍历 (20 分)
读入n值及n个整数,建立单链表并遍历输出。输入格式:读入n及n个整数。输出格式:输出n个整数,以空格分隔(最后一个数的后面没有空格)。输入样例:在这里给出一组输入。例如:210 5输出样例:在这里给出相应的输出。例如:10 5#include<stdio.h>#include<malloc.h>typedef str...原创 2019-05-22 08:10:05 · 8688 阅读 · 0 评论 -
PTA 7-2 求链式线性表的倒数第K项 (20 分)
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。输入格式:输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。输出格式:输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。输入样例:4 1 2 3 4 5 6 7 8 9 0 -1输出样例:7#include &...原创 2019-05-22 08:10:50 · 1310 阅读 · 0 评论 -
PTA 7-3 链表倒数n个结点的乘积 (20 分)
本题要求计算单链表倒数n个结点的乘积。例如,给出单链表1 2 3 4 5,则倒数2个结点的乘积为20。输入格式:输入有2行,第一个行为2个非负整数m和n。其中m为链表结点个数,n为链表倒数结点的数量。题目保证计算结果在int范围内。 第二行为链表的m个数,以空格分隔。输出格式:在一行中输出倒数n个结点的乘积。输入样例:5 21 2 3 4 5输出样例:20...原创 2019-05-22 08:11:50 · 5353 阅读 · 5 评论 -
PTA 7-4 有序链表的插入 (20 分)
已知一个递增有序链表L(带头结点,元素为整数),编写程序将一个新整数插入到L中,并保持L的有序性。 其中单链表的类型定义参考如下:typedef int elementType;typedef struct lnode{ elementType data;struct lnode *next;}Lnode,* LinkList;输入格式:输入分三行第一行 元素个数...原创 2019-05-22 08:12:44 · 5125 阅读 · 1 评论 -
PTA 7-5 两个有序链表序列的合并 (20 分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 3 5 -12 4 6 8 10 ...原创 2019-05-22 08:13:27 · 2105 阅读 · 1 评论 -
PTA 7-2 回文判断 (20 分)
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。输入格式:输入待判断的字符序列,按回车键结束,字符序列长度<20。输出格式:若字符序列是回文,输出“YES”;否则,输出“NO”。输入样例:abdba输出样例:YES#include<iostream&...原创 2019-05-24 07:46:11 · 6489 阅读 · 1 评论 -
PTA 7-1 重排链表 (25 分)
给定一个单链表L1→L2→⋯→Ln−1→Ln,请编写程序将链表重新排列为Ln→L1→Ln−1→L2→⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。输入格式:每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N(≤105)。结点的地址是5位非负整数,NULL地址用−...原创 2019-05-24 07:46:34 · 4223 阅读 · 0 评论 -
PTA 7-2 堆栈操作合法性 (25 分)
假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入S和X序列,判断该序列是否合法。输入格式:输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由S和X构成的序列。序列保证不为空,且长...原创 2019-05-24 07:46:44 · 1393 阅读 · 0 评论 -
PTA 7-3 括号匹配 (25 分)
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。输入格式:输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。输出格式:如果括号配对,输出yes,否则输出no。输入样例1:sin(10+20)输出样例1:yes输入样例2:{[}...原创 2019-05-24 07:46:54 · 1988 阅读 · 0 评论 -
PTA 7-4 列车调度 (25 分)
火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格式:输入第一行给出一个...原创 2019-05-26 16:49:43 · 2680 阅读 · 0 评论 -
PTA 7-1 jmu-ds-简单密码 (22 分)
Julius Caesar曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文。比如字符A用F来代替。如下是密文和明文中字符的对应关系。密文 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z明文 V W X Y Z A B C D E F G H I J K L M N O P Q ...原创 2019-05-24 07:47:03 · 7196 阅读 · 0 评论 -
PTA 7-2 约瑟夫环 (25 分)
N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。输入格式:输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。输出格式:按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空...原创 2019-05-24 07:47:09 · 16304 阅读 · 3 评论 -
PTA 7-3 列车厢调度 (25 分)
1 ====== <--移动方向 / 3 ===== \ 2 ====== -->移动方向 大家或许在某些数据结构教材上见到过“列车厢调度问题”(当然没见过也不要紧)。今天,我们就来实际操作一下列车厢的调度。对照上方的ASCII字符图,问题描述如下:有三条平行的列车轨道(1、2、3)以及1...原创 2019-05-24 07:47:27 · 2921 阅读 · 1 评论 -
PTA 7-1 数组循环左移 (20 分)
本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(am⋯an−1a0a1⋯am−1)(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式...原创 2019-05-22 08:04:28 · 2366 阅读 · 0 评论