![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
PTA数据结构
分享PTA甲级题目代码及解析
夏安
这个作者很懒,什么都没留下…
展开
-
PTA7-1 迷宫寻路 (20分)
7-1 迷宫寻路 (20分)给定一个M行N列的迷宫图,其中 “0"表示可通路,“1"表示障碍物,无法通行。在迷宫中只允许在水平或上下四个方向的通路上行走,走过的位置不能重复走。5行8列的迷宫如下:0 1 1 1 0 0 0 00 0 0 1 0 0 0 00 1 0 0 0 1 0 00 1 1 1 0 1 1 01 0 0 0 0 0 0 0则从左上角(1,1)至右下角(5,8)...原创 2020-04-08 18:59:07 · 6211 阅读 · 0 评论 -
PTA列出叶结点 (25分)
【程序思路】按从上到下、从左到右的顺序输出,则是层序遍历的顺序,这里需要用到队列。首先需要根据输入找出根节点,将输入利用静态链表的方式保存,没有被指向的编号就是根节点。然后再根据层序遍历遍历树,若该节点为叶子节点则将其编号保存,最后输出。【程序实现】#include<bits/stdc++.h>using namespace std;struct tree{ int le...原创 2020-04-06 21:22:36 · 3007 阅读 · 2 评论 -
PTA 7-4 最小生成树的唯一性 (35分)
PTA 7-4 最小生成树的唯一性 (35分)给定一个带权无向图,如果是连通图,则至少存在一棵最小生成树,有时最小生成树并不唯一。本题就要求你计算最小生成树的总权重,并且判断其是否唯一。输入格式:首先第一行给出两个整数:无向图中顶点数 N(≤500)和边数 M。随后 M 行,每行给出一条边的两个端点和权重,格式为“顶点1 顶点2 权重”,其中顶点从 1 到N 编号,权重为正整数。题目保证最小生成树的总权重不会超过 2^30输出格式:如果存在最小生成树,首先在第一行输出其总权重,第二行输出“Yes”原创 2020-05-28 12:03:50 · 4606 阅读 · 2 评论 -
PTA 7-2 畅通工程之局部最小花费问题 (35分)
PTA 7-2 畅通工程之局部最小花费问题 (35分)某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出“畅通工程”的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路相连,只要互相间接通过快速路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建快速路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全地区畅通需要的最低成本。输入格式:输入的第一行给出村庄数目N (1≤N≤100);随后的N(N−1)/2行对应村庄间道路的成本及修建状态原创 2020-05-27 18:06:32 · 1197 阅读 · 0 评论 -
PTA 7-3 畅通工程之最低成本建设问题 (30分)
PTA 7-3 畅通工程之最低成本建设问题 (30分)现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。输入样例:原创 2020-05-25 18:46:38 · 2746 阅读 · 0 评论 -
PTA 7-1 公路村村通 (30分)
PTA 7-1 公路村村通 (30分)现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。输入样例:6 151 2原创 2020-05-25 14:05:00 · 3384 阅读 · 0 评论 -
PTA 哈利·波特的考试 (25分)
PTA 哈利·波特的考试 (25分)哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物。老师允许他自己带一只动物去考场,要考察他把这只动物原创 2020-05-23 22:28:14 · 703 阅读 · 0 评论 -
PTA 7-7 六度空间 (30分)
PTA 7-7 六度空间 (30分)“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。原创 2020-05-19 22:24:06 · 1524 阅读 · 0 评论 -
PTA 6-1 求采用邻接矩阵作为存储结构的无向图各顶点的度 (6分)
PTA 6-1 求采用邻接矩阵作为存储结构的无向图各顶点的度 (6分)函数接口定义:函数接口为:void dgree(MGraph G);G为采用邻接矩阵作为存储结构的有向图裁判测试程序样例:#include <stdio.h>#define MVNum 100 //最大顶点数 typedef struct{ char vexs[MVNum]; //存放顶点的一维数组 int arcs[MVNum][MVNum];原创 2020-05-19 18:13:29 · 15531 阅读 · 0 评论 -
PTA 7-2 邻接表创建无向图 (20分)
PTA 7-2 邻接表创建无向图 (20分)采用邻接表创建无向图G ,依次输出各顶点的度。输入格式:输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。 输入第二行为顶点的信息,每个顶点只能用一个字符表示。 依次输入j行,每行输入一条边依附的顶点。输出格式:依次输出各顶点的度,行末没有最后的空格。输入样例:5 7ABCDEABADBCBECDCEDE输出样例:2 3 3 3 3一道水题,无需建图也能AC,第一种方法无需建图,第二种原创 2020-05-16 14:43:34 · 8799 阅读 · 1 评论 -
PTA 7-1 邻接矩阵表示法创建无向图 (20分)
PTA 7-1 邻接矩阵表示法创建无向图 (20分)采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度。输入格式:输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。 输入第二行为顶点的信息,每个顶点只能用一个字符表示。 依次输入j行,每行输入一条边依附的顶点。输出格式:依次输出各顶点的度,行末没有最后的空格。输入样例:5 7ABCDEABADBCBECDCEDE输出样例:2 3 3 3 3一道水题,无需建图也能AC【程序实现原创 2020-05-16 14:19:56 · 16424 阅读 · 2 评论 -
PTA 7-3 Windows消息队列 (25分)
PTA 7-3 Windows消息队列 (25分)消息队列是Windows系统的基础。对于每个进程,系统维护一个消息队列。如果在进程中有特定事件发生,如点击鼠标、文字改变等,系统将把这个消息加到队列当中。同时,如果队列不是空的,这一进程循环地从队列中按照优先级获取消息。请注意优先级值低意味着优先级高。请编辑程序模拟消息队列,将消息加到队列中以及从队列中获取消息。输入格式:输入首先给出正整数N...原创 2020-05-06 16:33:24 · 2049 阅读 · 2 评论 -
PTA 7-2 哈夫曼编码 (30分)
PTA 7-2 哈夫曼编码 (30分)给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给出一套编码,使得用此编码压缩原文可以得到最短的编码总长。然而哈夫曼编码并不是唯一的。例如对字符串"aaaxuaxz",容易得到字母 ‘a’、‘x’、‘u’、‘z’ 的出现频率对应为 4、2、1、1。我们可以设计编码 {‘a’=0, ‘x’=10, ‘u’=110, ‘z’=111},也可以用另...原创 2020-05-06 15:54:51 · 5801 阅读 · 2 评论 -
PTA 最小堆插入元素和删除堆顶(无哨兵元素) (20分)
PTA 最小堆插入元素和删除堆顶(无哨兵元素) (20分)对于给定的最小堆(优先队列),分别实现插入元素和删除堆顶的函数。函数接口定义:int insertIntoHeap(struct Heap* h, int x); // 向堆中插入元素xint deleteMin(struct Heap* h, int* pElement); //将堆顶元素拷贝到pElement所指变量并删除堆...原创 2020-05-02 15:50:39 · 1802 阅读 · 1 评论 -
PTA 7-1 是否完全二叉搜索树 (30分)
PTA 7-1 是否完全二叉搜索树 (30分)将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果...原创 2020-04-29 14:55:15 · 1971 阅读 · 0 评论 -
PTA 7-1 还原二叉树 (25分)
PTA 7-1 还原二叉树 (25分)给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5【程序思路】...原创 2020-04-22 11:02:25 · 1164 阅读 · 0 评论 -
PTA 7-3 树的遍历 (25分)
PTA 7-3 树的遍历 (25分)给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 ...原创 2020-04-22 10:32:59 · 2061 阅读 · 0 评论 -
PTA二叉搜索树的操作集 (30分)
PTA二叉搜索树的操作集 (30分)本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindM...原创 2020-04-21 20:08:18 · 1193 阅读 · 0 评论 -
PTA甲级1094 The Largest Generation (25分)
PTA甲级1094 The Largest Generation (25分)A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level belong to the same generation. Your task is to find the generati...原创 2020-04-20 19:09:58 · 144 阅读 · 0 评论 -
PTA 根据后序和中序遍历输出先序遍历 (25分)
PTA 根据后序和中序遍历输出先序遍历 (25分)本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。输入格式:第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。输出格式:在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多...原创 2020-04-16 13:58:46 · 1458 阅读 · 0 评论 -
PTA 是否二叉搜索树 (25分)
PTA 是否二叉搜索树 (25分)本题要求实现函数,判断给定二叉树是否二叉搜索树。函数接口定义:bool IsBST ( BinTree T );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree...原创 2020-04-15 19:45:10 · 1196 阅读 · 0 评论 -
7-3 建立与遍历二叉树 (25分)
7-3 建立与遍历二叉树 (25分)以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉链式存储结构的二叉树,然后中序遍历该二叉树并输出结点数据。输入格式:字符串形式的先序序列(即结点的数据类型为单个字符)输出格式:中序遍历结果输入样例:在这里给出一组输入。例如:ABC##DE#G##F###输...原创 2020-04-15 14:50:55 · 4123 阅读 · 0 评论 -
7-1 求二叉树的叶子结点个数 (20分)
7-1 求二叉树的叶子结点个数 (20分)以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数。输入格式:输入二叉树的先序序列。提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。输出格式:输出有两行:第一行是二叉树的中序遍历序列;第二行是二叉树的叶子结点个数。输入样例:ABC##DE#G##F###输出样例:CB...原创 2020-04-15 14:48:44 · 4583 阅读 · 0 评论 -
7-2 二叉树的遍历 (10分)
7-2 二叉树的遍历 (10分)根据输入构造二叉树,输出该二叉树的先序序列。二叉树共有N个节点,节点编号是1到N。约定1号节点是根节点。输入格式:第一行输入整数N。 接下来有N行,依次给出1到N节点的左孩子和右孩子。对于这N行中的每一行,有两个整数。第i(i=1, 2, …, N)行中,第一个整数指出左孩子的编号,第二个整数指出右孩子的编号。如果整数值为0,表示没有左孩子或右孩子。输出格式...原创 2020-04-15 14:02:25 · 3604 阅读 · 1 评论 -
PTA 树的同构 (25分)
PTA 树的同构 (25分)输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字母、其左孩子结点的编号、右孩子结点的编号。如果孩子结点为空,则在相应位置上给出“-”。给出的数据间用一个空格分隔。注意:题目保证每个结点中存储的字母是不同的...原创 2020-04-14 19:48:31 · 266 阅读 · 0 评论 -
PTA 列车调度 (25分)
PTA 列车调度 (25分)【程序实现】#include<bits/stdc++.h>using namespace std;int main(){ int num,n; cin>>n; set<int> s; for(int i=0;i<n;i++) { cin>>num; ...原创 2020-04-08 21:42:31 · 1431 阅读 · 0 评论 -
PAT甲级1074 Reversing Linked List (25分)
【程序思路】先根据地址按顺序读入节点,入栈,当栈里的元素个数等于k时全部出栈,并按出栈顺序保存,最后若栈不为空,则全部出栈并按出栈的稀饭顺序保存,最后输出各节点注意:输入的节点中有可能存在无用节点需要过滤,这里我使用map映射来实现过滤【代码实现】#include<bits/stdc++.h>using namespace std;struct node{ int...原创 2020-04-04 21:25:09 · 182 阅读 · 0 评论 -
PTA 银行排队问题之单队列多窗口服务 (25分)
PTA 银行排队问题之单队列多窗口服务 (25分)假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。本题要求输出前来等待服务的N位顾客的平均等待时间、最长等待时间、最后完成时间,并且统计每个窗口服务了多少名顾客。输入格式:输入第1行给出正整数N(≤1000...原创 2020-04-08 21:24:56 · 1179 阅读 · 0 评论