PTA数据结构题目集
文章平均质量分 51
聚焦数据结构核心知识,精选典型习题助力算法能力提升。
秋说
聚焦全栈开发与网络安全实战 | 欢迎订阅优质付费专栏,专注打造「新手能看懂、学完能实战」的全栈技术教程。商务合作/项目与毕设指导/产品推广/技术支持,可私信沟通。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【PTA数据结构 | C语言版】是否红黑树
给定一棵染了红/黑颜色的二叉查找树,请判定其是否满足红黑树定义。输入格式:输入首先给出整数 k(≤30),是测试数据的组数。每一组测试数据先在一行中给出正整数 n(≤30),为树中结点个数;第二行给出该二叉查找树树的先序遍历序列。树中所有键值都是正整数,但我们用负号表示该对应结点是红色的,其它没有负号的结点是黑色的。同行数字以空格分隔。输出格式:对每组数据,如果对应的二叉查找树是红黑树,就在一行中输出 Yes,否则输出 No。原创 2025-07-24 20:11:28 · 508 阅读 · 0 评论 -
【PTA数据结构 | C语言版】小规模分书问题的嵌套循环算法
分书问题是指:已知 n 个人对 m 本书的喜好(n≤m),现要将 m 本书分给 n 个人,每个人只能分到 1 本书,每本书也最多只能分给 1 个人,并且还要求每个人都能分到自己喜欢的书。列出所有满足要求的方案。本题请你实现小规模分书问题的嵌套循环算法。输入格式:输入第一行给出两个正整数 n 和 m(n≤m),即分书问题中的人数和书的数量。由于本题仅用于测试嵌套循环算法,故此处的 n 和 m 取固定值,分别为 n=3 和 m=4。随后 n 行,每行给出 m 个关系矩阵元素。原创 2025-07-24 18:38:38 · 542 阅读 · 0 评论 -
【PTA数据结构 | C语言版】枚举法的递归实现
分书问题是指:已知 n 个人对 m 本书的喜好(n≤m),现要将 m 本书分给 n 个人,每个人只能分到 1 本书,每本书也最多只能分给 1 个人,并且还要求每个人都能分到自己喜欢的书。列出所有满足要求的方案。本题请你尝试给出递归实现的解。输入格式:输入第一行给出两个正整数 n 和 m(n≤m),即分书问题中的人数和书的数量。由于本题仅用于测试递归算法,此处的 m 取固定值 4。随后 n 行,每行给出 m 个关系矩阵元素。其中第 i 行第 j 个元素为 1 表示第 i 个人喜欢第 j 本书原创 2025-07-24 18:37:33 · 596 阅读 · 0 评论 -
【PTA数据结构 | C语言版】分治法的伪代码描述
请根据分治法的伪代码将归并排序用分治法模板改写,展示分治法的“分”、“治”、“合”。输入格式:输入首先给出一个正整数 n(≤100),随后一行给出 n 个不超过 10^3 的待排序的正整数。同行数字间以空格分隔。输出格式:在一行中输出按非递减序排列好的有序序列。为简化输出处理,每个数字后面跟一个空格。原创 2025-07-24 18:37:21 · 601 阅读 · 0 评论 -
【PTA数据结构 | C语言版】第n项斐波那契数的计算
斐波那契数的定义为:F0=F1=1,Fi=Fi−1+Fi−2(i≥2)。本题要求计算第 n 项斐波那契数(注意 n 从 0 开始计数)。请尝试用递归和循环两种方法实现。注意:由于斐波那契数呈指数级增长,所以对比较小的 n 也会得到很大的计算结果。这里假设输出在 long long 型整数范围内,即 n≤91。输入格式:输入在一行中给出一个非负整数 n(≤91)。原创 2025-07-24 18:37:07 · 532 阅读 · 0 评论 -
【PTA数据结构 | C语言版】A算法
八数码问题的定义是:给定一个 3×3 的九宫格棋盘,其上放置 8 个棋子,分别从 1 到 8 编号。另有一个空格,与空格相邻的棋子可以移到空格中。给定一个棋盘的初始状态和终止状态,求从初始状态变化为终止状态的最优方案,即移动棋子步数最少的方案。输入格式:输入给出棋盘的初始和终止状态,每个状态占 3 行,每行给出 3 颗棋子的编号,其中空格用 0 代表。同行数字间以 1 个空格分隔。输出格式:输出从初始到终止状态每一步移动后的棋盘状态,格式为:第一行输出 Step x:原创 2025-07-24 18:36:43 · 546 阅读 · 0 评论 -
【PTA数据结构 | C语言版】模拟退火算法
顶点覆盖是图中一些顶点的集合,使得图中的每条边都至少以该集合中的一个顶点为端点。“最优顶点覆盖问题”是求顶点数最少的顶点覆盖。输入格式:输入第一行给出正整数 n(≤10)和 m,分别对应图中顶点和边的数量。随后 m 行,每行给出一条边的一对顶点的编号,其间以空格分隔。顶点从 0 到 n−1 编号。最后一行给出模拟退火需要的参数,依次为:初始温度 T、降温系数 α、概率参数 k、迭代降温次数 iter_num、温度阈值 ϵ。原创 2025-07-24 18:36:16 · 458 阅读 · 0 评论 -
【PTA数据结构 | C语言版】枚举法的嵌套循环实现
分书问题是指:已知 n 个人对 m 本书的喜好(n≤m),现要将 m 本书分给 n 个人,每个人只能分到 1 本书,每本书也最多只能分给 1 个人,并且还要求每个人都能分到自己喜欢的书。列出所有满足要求的方案。本题请你尝试给出一个更为通用的嵌套循环代码模板。输入格式:输入第一行给出两个正整数 n 和 m(n≤m),即分书问题中的人数和书的数量。由于本题仅用于测试嵌套循环算法,故此处的 n 和 m 取固定值,分别为 n=3 和 m=4。随后 n 行,每行给出 m 个关系矩阵元素。原创 2025-07-24 18:32:51 · 478 阅读 · 0 评论 -
【PTA数据结构 | C语言版】迷你搜索引擎
实现一种简单的搜索引擎功能,快速满足多达 10^5 条关键字查询请求。输入格式:输入首先给出正整数 n(≤ 100),为文件总数。随后按以下格式给出每个文件的内容:第一行给出文件的标题,随后给出不超过 100 行的文件正文,最后在一行中只给出一个字符 #,表示文件结束。每行不超过 50 个字符。在 n 个文件内容结束之后,给出查询总数 m(≤10^5),随后 m 行,每行给出不超过 10 个英文单词,其间以空格分隔,每个单词不超过 10 个英文字母,不区分大小写。原创 2025-07-24 18:32:36 · 362 阅读 · 0 评论 -
【PTA数据结构 | C语言版】集合相似度
给定两个整数集合,它们的相似度定义为:Nc /Nt ×100%。其中 Nc 是两个集合都有的不相等整数的个数,Nt 是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。输入格式:输入第一行给出一个正整数 n(≤50),是集合的个数。随后 n 行,每行对应一个集合。每个集合首先给出一个正整数 m(≤10^4),是集合中元素的个数;然后跟 m 个 [0,10^9] 区间内的整数。原创 2025-07-24 18:32:24 · 508 阅读 · 0 评论 -
【PTA数据结构 | C语言版】整型关键字的散列映射
给定一系列整型关键字和素数 p,用除留余数法定义的散列函数 H(key)=key%p 将关键字映射到长度为 p 的散列表中。用线性探测法解决冲突。输入格式:输入第一行首先给出两个正整数 n(≤1000)和 p(≥n 的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出 n 个整型关键字。数字间以空格分隔。输出格式:在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。原创 2025-07-24 18:32:13 · 553 阅读 · 0 评论 -
【PTA数据结构 | C语言版】AVL 树的根
将给定的一系列数字插入初始为空的 AVL 树,请你输出最后生成的 AVL 树的根结点的值。输入格式:输入的第一行给出一个正整数 n(≤20),随后一行给出 n 个整形 int 范围内的、不同的整数,其间以空格分隔。输出格式:在一行中输出顺序插入上述整数到一棵初始为空的 AVL 树后,该树的根结点的值。原创 2025-07-24 18:32:00 · 413 阅读 · 0 评论 -
【PTA数据结构 | C语言版】垃圾分类
本题就请你现场实现一个简单的垃圾分类小助手。输入格式:输入首先给出官方分类指南中每种物品的归属。在一行中给出一个正整数 N(≤10^5),即物品数量;随后 N 行,每行给出一个物品名称(长度不超过 10 的、由小写英文字母和下划线组成的字符串)和该物品所属的分类(1 代表干垃圾、2 代表湿垃圾、3 代表可回收物、4 代表有害垃圾)。题目保证所有物品名称无重复。原创 2025-07-24 18:31:47 · 594 阅读 · 0 评论 -
【PTA数据结构 | C语言版】二叉查找树的操作
请编写程序,实现二叉查找树的插入、删除、查找操作,并完成简单的测试。输入格式:输入首先给出一个正整数 n(≤10),随后一行给出 n 个不重复的整数。最后一行给出一个测试用的整数 key。输出格式:执行以下操作并输出:将给出的 n 个不重复的整数顺次插入一棵初始为空的二叉查找树。查找 key 是否在树中。如果找到了,在一行中输出 Found key = key;否则输出 NotFound.。原创 2025-07-24 18:31:34 · 510 阅读 · 0 评论 -
【PTA数据结构 | C语言版】MillerRabin 素数测试算法
请你实现 Miller-Rabin 素数测试算法。输入格式:输入在一行中给出两个正整数:n(≤1000)为待判定的数字、k(≤10)为测试次数。输出格式:若 n 为素数,则在一行中输出 1,否则输出 0。原创 2025-07-24 11:16:19 · 433 阅读 · 0 评论 -
【PTA数据结构 | C语言版】查找树判断
对于二叉查找树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉查找树。现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉查找树或某镜像二叉查找树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。输入格式:输入的第一行包含一个正整数 n(≤1000),第二行包含 n 个整数,为给出的整数键值序列,数字间以空格分隔。原创 2025-07-23 11:52:47 · 4735 阅读 · 0 评论 -
【PTA数据结构 | C语言版】树种统计
随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。输入格式:输入首先给出正整数 n(≤10^5),随后 n 行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过 30 个英文字母和空格组成(大小写有区分)。输出格式:按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后 4 位。原创 2025-07-23 11:52:36 · 499 阅读 · 0 评论 -
【PTA数据结构 | C语言版】笛卡尔树
笛卡尔树是一种特殊的二叉树,其结点包含两个关键字 k1 和 k2。首先笛卡尔树是关于 k1 的二叉查找树,即结点左子树的所有 k1 值都比该结点的 k1 值小,右子树则大。其次所有结点的 k2 关键字满足优先队列(不妨设为最小堆)的顺序要求,即该结点的 k2 值比其子树中所有结点的 k2 值小。给定一棵二叉树,请判断该树是否笛卡尔树。输入格式:输入首先给出正整数 n(≤1000),为树中结点的个数。随后 n 行,每行给出一个结点的信息,包括:结点的 k1 值、k2 值、左孩子结点编号、右孩子结点编号。原创 2025-07-23 11:52:26 · 546 阅读 · 0 评论 -
【PTA数据结构 | C语言版】线段树的操作
请编写程序,实现线段树的四个重要操作:初始化、点更新、区间查询、区间更新。这里的查询任务定义为求最小值。输入格式:输入首先给出一个正整数 n(2≤n≤10^3),随后一行给出 n 个绝对值不超过 10^8的整数,为存入线段树的原始数据。接下来三行,依次给出:第一次查询的区间端点位序 ql 和 qr;点更新的位序 idx 和更新值 value;区间更新的区间端点位序 ql 和 qr,以及该区间内所有元素的增值 c。原创 2025-07-23 11:52:16 · 7503 阅读 · 0 评论 -
【PTA数据结构 | C语言版】树状数组的操作
请编写程序,实现树状数组区间求前缀和、单点修改的操作。输入格式:输入首先给出一个正整数 n(2≤n<10^3),随后一行给出 n 个绝对值不超过 10^5 的整数。输出格式:第一行按存储顺序输出树状数组中元素;第二行按存储顺序输出前缀和数组中的元素。同行数字间以 1 个空格分隔。为输出简单起见,每个数字后有一个空格。原创 2025-07-23 11:52:07 · 437 阅读 · 0 评论 -
【PTA数据结构 | C语言版】AVL树的操作
请编写程序,实现 AVL 树的插入及旋转操作。输入格式:输入首先给出一个正整数 n(≤20),随后一行给出 n 个不重复的整数。数字间以空格分隔。输出格式:将给定的 n 个不重复的整数顺次插入一棵初始为空的 AVL 树。随后输出该树的先序遍历序列,每个数字占一行。原创 2025-07-23 11:51:50 · 499 阅读 · 0 评论 -
【PTA数据结构 | C语言版】索引表的顺序查找
请编写程序,实现分块有序的索引表的顺序查找算法。输入格式:输入首先给出 2 个正整数,即索引表的规模 m(≤100)和数据块的规模 l(≤100)。随后 m 行,每行给出 l 个数据,为 int 型正整数。每行的数据乱序,但第 i 行所有数据都不超过第 i+1 行的所有数据。最后一行给出若干正整数,为需要查找的元素,最后以 −1 结尾,这个数字不需要查找。同行数字间以空格分隔。题目保证顺序表中无重复元素。原创 2025-07-23 11:51:36 · 517 阅读 · 0 评论 -
【PTA数据结构 | C语言版】模拟EXCEL排序
Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。输入格式:输入的第一行包含两个正整数 n (≤10^5) 和 c,其中 n 是纪录的条数,c 是指定排序的列号。之后有 n 行,每行包含一条学生纪录。每条学生纪录由学号(6 位数字,保证没有重复的学号)、姓名(不超过 8 位且不包含空格的字符串)、成绩([0, 100] 内的整数)组成,相邻属性用 1 个空格隔开。输出格式:在 n 行中输出按要求排序后的结果,即:当 c=1 时,按学号递增排序。原创 2025-07-23 11:51:16 · 537 阅读 · 0 评论 -
【PTA数据结构 | C语言版】排序
给定 n 个(长整型范围内的)整数,要求输出从小到大排序后的结果。输入格式:输入第一行给出正整数 n(≤10^5),随后一行给出 n 个(长整型范围内的)整数,其间以空格分隔。输出格式:在一行中输出从小到大排序后的结果,数字间以 1 个空格分隔,行末不得有多余空格。原创 2025-07-23 11:49:49 · 4315 阅读 · 0 评论 -
【PTA数据结构 | C语言版】归并排序兼求逆序对数量
请编写程序,实现排序兼求逆序对数量的算法。逆序对是指:序列中两个元素 ai 和 aj 满足条件 i<j 且 ai >aj,则被称为一个逆序对。输入格式:输入首先给出一个正整数 n(≤100),随后一行给出 n 个不超过 10^3 的待排序的正整数。同行数字间以空格分隔。原创 2025-07-23 11:49:39 · 500 阅读 · 0 评论 -
【PTA数据结构 | C语言版】排序算法正确性测试
此题仅用于测试各种排序算法的基本正确性,并不测试其效率,故测试数据规模较小。输入格式:输入首先给出一个正整数 n(≤100),随后一行给出 n 个值不超过 10^3 的待排序的正整数。同行数字间以空格分隔。输出格式:在一行中输出按非递减序排列好的有序序列。为简化输出处理,每个数字后面跟一个空格。原创 2025-07-23 11:49:29 · 477 阅读 · 0 评论 -
【PTA数据结构 | C语言版】部落
在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈。我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同一个部落。输入格式:输入在第一行给出一个正整数N(≤10^4),是已知小圈子的个数。随后N行,每行按下列格式给出一个小圈子里的人原创 2025-07-23 11:49:17 · 537 阅读 · 0 评论 -
【PTA数据结构 | C语言版】团结就是力量
常言道:团结就是力量。这里我们定义一个群体是“团结”的,如果这个群体中的任意两个人都是好朋友。并且,我们假定友谊是双向且可传递的,即:若 A 和 B 是朋友、B 和 C 是朋友,则 A 和 C 一定是朋友。下面给定一些人与人之间的关系,你的任务是用最少的努力将他们全部团结起来。输入格式:首先在第一行给出两个正整数 n 和 m(均不超过 10^5),分别为总人数和人与人之间的关系条数。原创 2025-07-23 11:49:05 · 734 阅读 · 0 评论 -
【PTA数据结构 | C语言版】文件传输
当两台计算机双向连通的时候,文件是可以在两台机器间传输的。给定一套计算机网络,请你判断任意两台指定的计算机之间能否传输文件?输入格式:首先在第一行给出网络中计算机的总数 n (2≤n≤10^4),于是我们假设这些计算机从 1 到 n 编号。随后每行输入按以下格式给出原创 2025-07-23 11:48:55 · 488 阅读 · 0 评论 -
【PTA数据结构 | C语言版】以路径压缩策略查找元素所在的集合
请编写程序,在采用按秩合并策略的基础上,实现以路径压缩策略查找元素所在集合的不相交集基本操作。注:1、所谓“按秩合并策略”是指:集合元素 i 和 j 合并时,如果两个集合的秩(rank)相等,则总是将 i 所在的集合并入 j 所在的集合,即合并后集合的名称为 j 所在的集合名称,同时将合并后的集合秩增 1;否则总是将秩小的集合并入秩大的集合。2、所谓“路径压缩”是指:在返回元素 i 所在集合的根结点 r 之前,将从 i 到 r 这条路径上所有结点的父结点都置为 r。原创 2025-07-23 11:48:29 · 624 阅读 · 0 评论 -
【PTA数据结构 | C语言版】折半查找
请编写程序,实现有序顺序表的折半查找算法。输入格式:输入首先给出一个正整数 n(≤10^5),随后一行按升序给出 n 个不超过 10^8 的正整数,为顺序表中的元素。最后一行给出若干正整数,为需要查找的元素,最后以 −1 结尾,这个数字不需要查找。同行数字间以空格分隔。题目保证顺序表中无重复元素。原创 2025-07-22 12:42:01 · 447 阅读 · 0 评论 -
【PTA数据结构 | C语言版】清点代码库
首先假设两个功能模块如果接受同样的输入,总是给出同样的输出,则它们就是功能重复的;其次我们把每个模块的输出都简化为一个整数(在 int 范围内)。于是我们可以设计一系列输入,检查所有功能模块的对应输出,从而查出功能重复的代码。你的任务就是设计并实现这个简化问题的解决方案。输入格式:输入在第一行中给出 2 个正整数,依次为 N(≤10^4)和 M(≤10^2),对应功能模块的个数和系列测试输入的个数。原创 2025-07-22 12:41:50 · 616 阅读 · 0 评论 -
【PTA数据结构 | C语言版】最短路的交点
给定有向加权图 G,和 4 个顶点 u, v, s, t。假设图 G 中所有边的权值都非负。设计一个算法来判定“从 u 到 v 的最短路径”和“从 s 到 t 的最短路径”是否存在一个交点 w。也即,顶点 w 是 u 到 v 的最短路径上的一个顶点,同时也是 s 到 t 的最短路径上的一个顶点。注意:最短路径包含两个端点;一对顶点间的最短路径可能不止一条,求交点时必须将所有最短路径考虑在内。原创 2025-07-22 12:41:41 · 573 阅读 · 0 评论 -
【PTA数据结构 | C语言版】统计工龄
给定公司 n 名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。输入格式:输入首先给出正整数 n(≤10^5),即员工总人数;随后给出 n 个整数,即每个员工的工龄,范围在 [0, 50]。输出格式:按工龄的递增顺序输出每个工龄的员工个数,格式为:“工龄:人数”。每项占一行。如果人数为 0 则不输出该项。原创 2025-07-22 12:41:32 · 434 阅读 · 0 评论 -
【PTA数据结构 | C语言版】插入排序还是堆排序
现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?输入格式:输入在第一行给出正整数 n (≤100);随后一行给出原始序列的 n 个整数;最后一行给出由某排序算法产生的中间序列。这里假设排序的目标序列是升序。数字间以空格分隔。原创 2025-07-22 12:41:21 · 546 阅读 · 0 评论 -
【PTA数据结构 | C语言版】德才论
输入第一行给出 3 个正整数,分别为:n(≤10^5),即考生总数;l(≥60),为录取最低分数线,即德分和才分均不低于 l 的考生才有资格被考虑录取;h(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到优先录取线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于 h,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线 l 的考生也按总分排序。原创 2025-07-22 12:41:09 · 495 阅读 · 0 评论 -
【PTA数据结构 | C语言版】与零交换
将 { 0, 1, 2, …, n−1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。例如对于初始序列 { 4, 0, 2, 1, 3 },我们可以通过下列操作完成排序原创 2025-07-22 12:40:03 · 436 阅读 · 0 评论 -
【PTA数据结构 | C语言版】按秩合并的不相交集操作
请编写程序,实现采用按秩合并策略的不相交集的基本操作。所谓“按秩合并策略”是指:集合元素 i 和 j 合并时,如果两个集合的秩(rank)相等,则总是将 i 所在的集合并入 j 所在的集合,即合并后集合的名称为 j 所在的集合名称,同时将合并后的集合秩增 1;否则总是将秩小的集合并入秩大的集合。原创 2025-07-22 12:39:29 · 639 阅读 · 0 评论 -
【PTA数据结构 | C语言版】不相交集基本操作
请编写程序,实现不相交集的基本操作。注意:此处假设集合元素 i 和 j 合并时,总是将 i 所在的集合并入 j 所在的集合,即合并后集合的名称为 j 所在的集合名称。输入格式:输入首先在第一行给出两个正整数,依次为集合中元素个数 n(1<n≤100)和元素之间的关系数 m(≤n)。随后 m 行,每行给出一对等价元素的编号,从 1 开始。同行数字均以一个空格分隔。原创 2025-07-22 12:39:20 · 382 阅读 · 0 评论 -
【PTA数据结构 | C语言版】爱之匹配
在 520 这个日子里,没有比开发一个约会 App 更合适做的事情了。这个软件的需求很简单,用户输入自己的性别、想要约会的异性的年龄范围 [a,b]、身高范围 [c,d],你要帮所有用户匹配出系统中满足其约会条件的异性。注意:双方性别、年龄、身高的要求必须全都符合对方的要求才可以;每人最多只能匹配一位异性。当然,同时让每个人都满意的目标其实很难达到,你只要尽力配成最多对就可以了。原创 2025-07-22 12:39:08 · 568 阅读 · 0 评论
分享