PTA
文章平均质量分 96
PTA相关算法实现
星码
有效的程序员不应该浪费很多时间用于程序调试,他们应该一开始就不要把故障引入。
展开
-
B1040 有几个PAT 与 A1101 Quick Sort
B1040 有几个PAT 与 A1101 Quick Sort原创 2021-03-16 00:04:58 · 125 阅读 · 0 评论 -
PTA Huffman Codes --- 堆的使用 和 Huffman树的建立
文章目录Huffman Codes头文件结构体的定义最小堆的建立使用最小堆建立一个自己的Huffman树计算自己建立的Huffman树的WPL关于题目中对学生提交的代码进行建树和删树进行学生输入的检验Huffman Codes这个代码虽然不难写,但也是很麻烦,大概写了4个多小时。。。(就是自己菜,还没有熟练编写代码能力)相关资料题目:Huffman Codes讲解:陈越姥姥MOO...原创 2020-04-17 23:39:10 · 406 阅读 · 0 评论 -
PTA Complete Binary Search Tree --- 完全二叉搜索树
概念解释:主要思路:对数组排序后:(使用c中函数 qsort 进行排序)根据完全二叉树性质得到左子树的个数这一部分代码在GetLeftLength函数中实现。根据左子树的个数在排序数列中找到根结点放到数组中相应位置solve函数中的TRoot就是在递归过程中根结点要存放的下标代码:int GetLeftLength(int n) { // 计算n个结点的树左子树的结点个数 ...原创 2020-04-05 09:55:38 · 553 阅读 · 0 评论 -
PTA 列出连通集 --- 对于对称数组的保存
思路这个题就是考验对于图的存储和遍历(BFS,DFS)操作图的保存有邻接矩阵和邻接表,而在这个题中我使用的是邻接矩阵,在这个邻接矩阵也有两种保存的办法:定义一个二维数组全部保存每个点的边,对于无向图,每个边要保存两边定义一个一维数组,对于无向图,只保存方法1中二维数组的下三角矩阵(每个边保存一次)相对于第一种可以节省很大的空间。对于第二种方法,两个结点之间的边在这个一维数组中的下标是...原创 2020-03-29 18:30:50 · 177 阅读 · 0 评论 -
PTA File Transfer --- 集合操作
这是一个类似于对集合的操作的题思路集合的逻辑结构可以看成是一个树(逻辑结构如下图),每个集合的代表元素为这个树的根,当合并两个元素对应的集合的时候,我们需要知道这写元素对应属于哪个集合,即找到这些集合对应的代表元素(即树根),再进行合并之类的操作这个树是子结点指向父结点(集合中的元素保存的是集合代表元素的下标). 我们把集合建立成一个数组,因为题目中的各个结点都是连续的数,所以可以通过...原创 2020-03-29 10:27:54 · 281 阅读 · 0 评论 -
PTA 堆中的路径 --- 用数组建立堆
这个题比较简单,就是用数组建立一个堆,这个堆也是个完全二叉树,所以满足性质:从1开始的数组中父结点的下标是子结点下标的 int(i/2)int(i/2)int(i/2)主要操作:代码中最主要的步骤就是在堆中插入一个元素:为了满足完全二叉树,我们需要把新的结点先放到最后一个位置,为了满足最小堆的建立,我们把新的结点进行与父结点比较并调整我们在与父结点比较时,因为数组的有效结点是从1...原创 2020-03-22 23:08:23 · 241 阅读 · 0 评论 -
PTA Root of AVL Tree --- 平衡二叉树的建立
昨天是种树节,今天才种完这个平衡二叉树。。。种这个树也太细节了思路:种树时记录每个结点的Height,通过这个可以计算每个树结点的平衡因子:通过左子树Height减右子树的Height。(注意:我的Height在叶结点时为1,之后每向上一层加1)对于不平衡的情况分为蓝色为插入结点,图来自MOOC中浙江大学老师的PPTSingleLeftRotation:ingleRightRotat...原创 2020-03-13 18:04:27 · 281 阅读 · 1 评论 -
PTA 是否同一棵二叉搜索树 ----- 二叉搜索树
来自MOOC数据结构这个题先构建了一个树,再将要检查的序列进行遍历这颗树不得不说,好的代码是你一眼就能get这个思路,慢慢也能看懂,就是写不出来这么好的代码。要学的还有很多啊#include <stdio.h>#include <stdlib.h>typedef struct T { int v; struct T* Left, * Right; in...原创 2020-03-12 15:12:50 · 513 阅读 · 0 评论 -
PTA Tree Traversals Again -----知先序和中序求后序
文章目录思路:难点:解决:代码:这个题的题意暗含的信息不太好理解,开始的时候我以为构建树的过程是根据入栈和出栈的顺序构建左子树或者右子树,实际上是:根据入栈循序得到先序遍历,根据出栈顺序得到中序遍历思路:我们先得到先序遍历和中序遍历的数组,在先序遍历可以知道谁是根结点,中序遍历可以知道左子树或右子树在数组中的下标范围,所以:在先序遍历中找一个根,之后在中序遍历中找到这个根对应的左子树和...原创 2020-03-09 11:25:59 · 200 阅读 · 0 评论 -
PTA Pop Sequence ----- 栈的Pop序列的检验
这个题是写的最舒服的一个题了,写完后没有大改,仅仅改了下循环之类的就得到正确答案了,也算是一个小进步:废话不说,直接上思路:思路使用栈的思路,进行比较:对于输入的一个序列,从这个序列的第一个元素开始遍历:如果这个元素的值大于我们栈顶的值或者栈为空,那么就入栈(注意可能会有栈满时还要入站的情况),直到栈顶等于这个元素然后弹出栈顶元素,接下来对这个序列的下一个元素开始判断注意:当...原创 2020-03-07 11:42:47 · 485 阅读 · 0 评论 -
PTA List Leaves ----- 层序遍历
处理思路:这个就是一个树的层次遍历(使用队列),如果在层次遍历过程中找到了一个叶结点(子节点为空),那么就输出,在用定义的head与last来判断是否为最后一个输出#define _CRT_SECURE_NO_WARNINGS//为了可以使用scanf#include <stdio.h>#include <stdlib.h>struct BT { int le...原创 2020-03-06 17:18:29 · 245 阅读 · 0 评论 -
PTA 树的同构 及 所引发的scanf_s与scanf输入问题
这篇博客不是为了解释该题如何去做,这个题的方法哪里都有,我想说在写这道题的时候,发现很多写法的错误都是由于编译器版本不同造成的,也有粗心造成的:没有bool类型需要引入stdbool.h头文件为了安全需要输入函数为scanf_s,输入一个字符时,scanf_s与scanf不相同等等,反正心态被搞炸了。。。还有最恶心的:输入时一行一行输入,而scanf_s中在接受每一行的输入的结束时必须写...原创 2020-03-05 08:54:13 · 748 阅读 · 0 评论 -
PTA Reversing Linked List ----- 对序列实现每K个元素反转一次
这个题我看了好多人的实现,发现他们是用了两个MAXSIZE大小的数组:第一个数组是保存输入第二个数组是保存的这些输入的顺序(将输入按照题意排序保存于这个数组)这样做很简单,但是看看这个想法的 空间复杂度O(2*MAXSIZE)我也是个菜鸡,可能分析有误,希望大家指出而我算法的空间复杂的O()#include "stdio.h"#include "stdlib.h"#define ...原创 2020-03-01 16:13:46 · 360 阅读 · 0 评论 -
PTA MOOC 最大子列和问题 与 Maximum Subsequence Sum
//最大子列和问题1int main() { int S; scanf_s("%d", &S); int MAX = 0, thismax = 0; int s; for (int i = 0;i < S;i++) { scanf_s("%d", &s); thismax += s; if (thismax > MAX) { MAX = ...原创 2020-03-01 00:00:19 · 147 阅读 · 0 评论 -
PTA 一元多项式的乘法与加法运算 ----- 使用链表实现加法和乘法并排序操作
MOOC中的视频解释请读者注意,视频中的实现方法是没有用头结点的链表来表示,但我实现的是带头结点的链表,在这个过程中,带头结点某些地方的代码与视频不同,带头结点的时可能会在PTA提交的时候测试点3出现段错误。。。//一元多项式的乘法与加法运算 (带头结点)typedef struct Polynomial { int c, e; struct Polynomial* Next;}*...原创 2020-02-26 19:41:18 · 493 阅读 · 0 评论