![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构pta
分享PTA上一些题目的思路
WA怪
这个作者很懒,什么都没留下…
展开
-
浙大PTA 7-3 树的同构 (25point(s))
7-3 树的同构 (25point(s))给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负...原创 2020-05-06 14:34:54 · 439 阅读 · 0 评论 -
浙大PTA 7-5 Tree Traversals Again (25point(s))
7-5 Tree Traversals Again (25point(s))An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbe...原创 2020-05-06 14:33:58 · 159 阅读 · 0 评论 -
浙大PTA 7-4 列出叶结点 (20point(s))
7-4列出叶结点(20point(s))对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。输入格式:首先第一行给出一个正整数N(≤10),为树中结点总数。树中的结点从 0 到N−1编号。随后N行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 "-"。编号间以 1 个空格分隔。输出格式:在一行中按规定顺序输出叶...原创 2020-05-06 14:31:42 · 1535 阅读 · 0 评论 -
浙大PTA 玩转二叉树 (25point(s))
玩转二叉树 (25point(s))给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历...原创 2020-05-06 14:31:24 · 774 阅读 · 0 评论 -
浙大PTA 树的遍历
树的遍历给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 ...原创 2020-05-06 14:31:08 · 323 阅读 · 0 评论 -
浙大PTA 根据后序和中序遍历输出先序遍历
根据后序和中序遍历输出先序遍历本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。输入格式:第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。输出格式:在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。输入样例:...原创 2020-05-06 14:30:38 · 502 阅读 · 0 评论 -
浙大PTA求前缀表达式的值
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。输入格式:输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。输出格式:输出前缀表达式的运算结果,保留...原创 2020-04-17 17:41:46 · 435 阅读 · 0 评论 -
浙大PTA列车调度
火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格式:输入第一行给出一个整数N ...原创 2020-04-17 12:53:37 · 722 阅读 · 0 评论 -
浙大PTA猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?输入格式:输入在一行中给一个正整数N(≤1000)。输出格式:在一行中输出当选猴王的编号。输入样例:11输出样例:7...原创 2020-04-17 12:26:16 · 382 阅读 · 0 评论 -
浙大PTA银行业务队列简单模拟
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。输入格式:输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数...原创 2020-04-17 11:11:10 · 773 阅读 · 0 评论 -
浙大PTA堆栈操作合法性
假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入S和X序列,判断该序列是否合法。输入格式:输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由S和X构成的序列。序列保证不为空,且长度不...原创 2020-04-17 10:59:34 · 654 阅读 · 0 评论 -
浙大PTA有序链表的合并
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 3 5 -12 4 6 8 10 -1输出样例...原创 2020-04-17 10:44:31 · 229 阅读 · 0 评论 -
浙大PTA求链式线性表的倒数第K项
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。输入格式:输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。输出格式:输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。输入样例:4 1 2 3 4 5 6 7 8 9 0 -1输出样例:7思路:将k个数放入链表中,由于链表的不可回溯...原创 2020-04-17 10:26:53 · 1421 阅读 · 0 评论 -
浙大PTA装箱问题
假设有N项物品,大小分别为s1 、s2 、…、si、…、sN,其中si为满足1≤si ≤100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。输入格式:输入第一行给出物品个数N(≤100...原创 2020-04-17 10:16:57 · 376 阅读 · 0 评论 -
浙大PTA 学生顺序表的建立
完成对一个顺序表的建立,表中的每个元素是同学们的学号、姓名和三门课程的成绩,输入5个同学的信息,然后显示在屏幕上。(要求利用顺序表的基本操作)输入格式:首先收入学生人数5,然后依次输入5个学生的学号、姓名和三门课的成绩输出格式:输入5个学生的学号、姓名和三门课的成绩输入样例:501 张三 89 89 8902 李四 90 90 9003 王五 89 89 8904 钱六 97 ...原创 2020-04-17 10:16:06 · 1412 阅读 · 1 评论 -
浙大PTA求集合交集
求整数集合A与整数集合B的交集。输入格式:输入有三行: 第一行是A和B的元素个数m和n; 第二行是集合A的m个元素; 第三行是集合A的n个元素。输出格式:输出交集的所有元素(按照在A集合出现的顺序输出,最后一个输出后面没有空格)。输入样例:在这里给出一组输入。例如:3 410 9 29 10 8 0输出样例:在这里给出相应的输出。例如:10 9ac代码:#include...原创 2020-04-17 10:15:07 · 2228 阅读 · 0 评论 -
浙大PTA单链表的创建及遍历
读入n值及n个整数,建立单链表并遍历输出。输入格式:读入n及n个整数。输出格式:输出n个整数,以空格分隔(最后一个数的后面没有空格)。输入样例:在这里给出一组输入。例如:210 5输出样例:在这里给出相应的输出。例如:10 5以下是ac代码:#include <iostream>using namespace std;typedef struct LNo...原创 2020-04-17 10:13:44 · 356 阅读 · 0 评论 -
浙大PTA两个有序链表序列的交集
思路:一个指针指向第一个链表,一个指针指向第二个链表,若俩个指针指向的节点的值相等,则用L指向这个节点,并且俩个指针都后移;否则指向节点值小的指针后移#include <iostream>using namespace std;typedef struct LNode * List;struct LNode{ int data; struct LNode ...原创 2020-04-04 23:02:39 · 703 阅读 · 0 评论 -
浙大PTA两个有序链表序列的合并
思路:用一个指针p1指向第一个链表,用一个指针p2指向第二个链表,比较俩个指针指向节点的值,哪个小把那个放进去,指针后移一位,当某个指针指向的链表为空,则另一个链表剩余部分直接连上即可#include <iostream>using namespace std;typedef struct LNode * List;struct LNode{ int data;...原创 2020-04-04 22:55:44 · 454 阅读 · 0 评论 -
浙大PTA两个有序序列的中位数
思路 :读入两次n个数,存放到同一个数组,排序,取中间值。#include <iostream>#include<algorithm>using namespace std;const int maxn = 200000 + 10;int main(){ int a[2 * maxn]; int n; scanf("%d", &n...原创 2020-04-04 22:25:11 · 368 阅读 · 0 评论 -
浙大PTA数组循环左移
思路:将数组的前m个元素依次放到n~n+m个位置,但是要注意题目没有说明m比n小,因此先取余,因为往左移动m个位置相当于没移动。#include <iostream>#include<cstdio>using namespace std;int main(){ int a[500]; int n, m;//n <= 100 sca...原创 2020-04-03 18:11:46 · 886 阅读 · 0 评论 -
浙大PTA一元多项式的乘法与加法运算
#include <iostream>using namespace std;typedef struct PolyNode* Polynomial;struct PolyNode{ int coef, expon; Polynomial link;};Polynomial ReadPoly();Polynomial Mult(Polynomial ...原创 2020-04-03 18:00:10 · 277 阅读 · 0 评论 -
浙大PTA一元多项式求导
#include <iostream>using namespace std;int main(){ int a, b; scanf("%d%d", &a, &b); if(a == 0 || b == 0){ printf("0 0\n"); return 0; } else{ ...原创 2020-04-03 17:53:30 · 275 阅读 · 0 评论 -
浙大PTA线性表元素的区间删除
题目要求:若Data数组中存在元素X满足minD< X < maxD,则把这个元素删除思路:新建一个下标,指向处理后的数组当前位置,若符合要求,则把原数组的元素放进来,否则不放进来。遍历完原数组之后,应当把L->Last修改成j-1,因为前面的j++,已经为下一个处理做准备了。List Delete( List L, ElementType minD, ElementTyp...原创 2020-04-03 16:56:26 · 1462 阅读 · 1 评论 -
浙大PTA弹球距离
题目思路:通过这个图片可以看到第i次弹起和第i+1下降经过的路程是一样的,并且等于第i次下降的路程*p,因此我们只需要将第一次下降加起来,留下的每俩段合起来一起加上去,直到弹起的高度达不到TOL阈值double dist( double h, double p ){ double current = h, sum = 0; sum += h; current *= ...原创 2020-04-03 16:44:32 · 1998 阅读 · 1 评论 -
浙大PTA递增的整数序列链表的插入
题目要求:在递增链表中插入一个值,使得插入之后,链表仍然为递增。思路:从前往后遍历,找到第一个比待插入值大的节点,插在这个节点前面,在这个例子中就是找到4(第一个比3大的元素)插在它前面。但是问题是单链表不能回溯,因此我们用当前节点的next的值来与待插入值X做比较。下面展示 代码。List Insert( List L, ElementType X ){ List s; ...原创 2020-04-03 16:26:19 · 812 阅读 · 1 评论