![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
MoriatyBug
nothing is easy or difficult
展开
-
深入理解并查集
并查集是一种树形结构,它是由并查集算法进行维护的。而并查集算法(Union-find-algorithm),顾名思义,它主要是由 “合并集合” 和 “查找集合”,”合并集合“是将两个连通的集合合并为一个集合,”查找集合“判断某个节点的代表节点,也就是根节点。 1. 并查集算法的应用场景 图的连通性,可以用来判断哪些节点是连通的。也可以知道一个图一共能被分成几个相互独立的块。 2. 算法简介 图的连通状态如上图所示,共分为三个集合,灰色、蓝色、粉色。在一个集合中任何两个点都是连通的。 如何判断两个点是否原创 2020-05-12 22:07:51 · 227 阅读 · 0 评论 -
MIT HAKMEM算法
算法用途:统计二进制数字中1的个数 背景知识: 对于n^K的数,我们要得到它的余数为1,就要对它进行求模运算,经过证明,我们用n-1即可达到效果。 对于一个多项式P(N)来说,P(N)%(N-1) = {sum(Ai)} %(N-1),其中如果n-1> sum(Ai), 式子可转化为:P(N)%(N-1) = sum(Ai),【Ai为系数】 对于32位数来说,sum(Ai)<...原创 2018-09-21 23:30:23 · 362 阅读 · 0 评论 -
树的同构问题
题目要求: 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结...原创 2018-09-27 00:09:54 · 975 阅读 · 0 评论 -
PTA Reversing Linked List
题目不难,总是出现一些细节上的问题。这题卡了好几天了,心里很难受。最终还是决定看答案。 不管会不会,一定要在有限的时间AC掉,超过一定的时间,那就是不会,根本没有必要再去硬啃,不然会很受打击,前期还是多积累经验,重在练基础。到了后面应该就能啃出来了。 题目: 02-线性结构3 Reversing Linked List (25 分) Given a constant K and a sin...原创 2018-09-25 00:01:44 · 1164 阅读 · 0 评论 -
两个链表的合并
题目要求: 注意题目中的一句话,要求我们使用原来序列中的结点!那么我们就不能使用新的内存单元,来单独存储合并后的链表。 【如果申请新内存,pta会报段错误】 使用原来的结点:优点,节省内存;缺点,破坏了原来的链表,不能原样输出原链表## 使用新内存单元:优点,保存原链表状态;缺点,浪费内存## 使用原来结点的代码: List Merge(List L1, List L2) { ...原创 2018-09-18 16:23:12 · 292 阅读 · 0 评论 -
多项式的加法与乘法运算
多项式的运算是链表使用的典型例子,涵盖了很多链表的操作,值得深度学习与思考。 多项式节点结构体定义为: 包含了系数,指数,以及指向下一节点的指针 struct PolyNode{ int coef; int expon; struct PolyNode *link; }; typedef struct PolyNode *Polynomial; Polynomi...原创 2018-09-18 00:08:22 · 991 阅读 · 0 评论 -
链表的合并
#include <stdio.h> #include <stdlib.h> typedef struct LNode *List; struct LNode{ int Data; int next; }; List L; struct LNode Lnode; List Create() { List L, p, pre; L = (...原创 2018-09-16 23:13:00 · 119 阅读 · 0 评论 -
交换排序
写题目用到了交换排序,很基本的排序算法,写个帖子记录一下。 交换排序包括两种方法:一种是冒泡排序,另一种是选择排序。 一、选择排序 //swapsort for( int i = 0; i < N - 1; i++ ) { for( int j = i + 1; j < N; j++) { if(A[i] ...原创 2018-08-25 22:20:28 · 101 阅读 · 0 评论 -
2018USTC-SummerSchool-DS-TEST1
一、顺序编程 1.编程,要求用户以整数方式输入秒数(使用long或long long变量存储),然后以天、小时、分钟和秒的方式显示这段时间。 2.设计一个加密算法:用a代替z, 用b代替y, 用c代替x, ……,用z代替a。现要求输入一个字符,对其进行加密输出。 二、分支编程 3.从键盘输入年月日,判断输入的日期是否正确(要判断大小月,判断闰年)。如: 输入: 2018 13 32,输出:不正确 ...原创 2018-08-02 21:43:00 · 449 阅读 · 0 评论 -
2018USTC-SummerSchool-DS-TEST4
哈夫曼编码问题 今天的题对于小白的我是真的心有余而力不足,看着边上大神的代码敲得飞起,而我却半天挤不出一行代码, 最终只能在网上copy了一段。数据结构什么的我是完全没有学过啊,这还让我怎么苟。老师白天直接从线性表讲到二叉树的节奏,我也听不懂什么。。。。补课真的让我捉急。 贴上copy的代码吧。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 /*----------...原创 2018-08-05 21:58:27 · 312 阅读 · 0 评论 -
2018USTC-SummerSchool-DS-TEST3
五、函数编程 501 两个相差为2的素数称为素数对,如5和7,17和19等,编程找出所有两个数均不大于n的素数对,n由键盘输入。 502分解因数。给出一个正整数a,要求分解成若干个正整数的乘积,a = a1 * a2 * ... * an,并且1 < a1 <= a2 <= a3 <= ... <= an,这样的分解的种数有多少? 如输入2,输出1;输入20,输出4....原创 2018-08-04 22:04:23 · 299 阅读 · 0 评论 -
2018USTC-SummerSchool-DS-TEST2
1.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一.个。第二天早上又将剩下的桃子吃掉一半,又多吃了一一个。 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,发现只剩一一个枕子了,求猴子第一天究竟摘了多少个桃子? 2.现代数学的著名证明之-是Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 3. 一个...原创 2018-08-03 21:23:32 · 194 阅读 · 0 评论