
数据结构基础
基础数据结构
abyss_miracle
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
KMP匹配通俗解释
转自:灵茶山艾府 角色: 甲:abbaabbaaba 乙:abbaaba 乙对甲说:「帮忙找一下我在你的哪个位置。」甲从头开始与乙一一比较,发现第 7 个字符不匹配。 要是在往常,甲会回退到自己的第 2 个字符,乙则回退到自己的开头,然后两人开始重新比较。[1]这样的事情在字符串王国中每天都在上演:不匹配,回退,不匹配,回退,……但总有一些妖艳字符串要花自己不少的时间。上了年纪的甲想做出一些改变。于是乎定了个小目标:发生不匹配,自身不回退。甲发现,若要成功与乙匹配,必须要匹配 7 个长度的字符。所以就算转载 2020-12-14 15:45:35 · 182 阅读 · 0 评论 -
PTA 查找(散列查找)
散列查找: 根据散列函数确定关键词key的存储位置,将key存储在一张hash哈希表内,然后根据一定的规则(线性探测,平方探测,分离链接等)来规避相同key的数据之间的冲突。 如上图,散列表的性能和装填因子阿法有关,一般来说阿法不要超过0.85,并且一般来说,表长取大于且最接近元素数量的质数。 解决冲突时,如下图所示,查找和插入时,遇到相同的K,根据当前的冲突处理规则后移数据的摆放位置。 以下...原创 2020-04-30 15:01:11 · 1489 阅读 · 0 评论 -
PTA 排序(快速排序,基数排序)
快速排序 在一堆数中选取一个主元,以主元为中心将这堆数分为大小两部分,对这两部分递归调用快排,最后当规模最够小的时候(小于预设的阈值CutOff)将使用简单排序(如插入排序)。 /*快速排序*/ //取主元 get pivot long Median3(long a[], long Left, long Right) { int Center = (Right +Left)/2; if (a[...原创 2020-04-22 16:54:37 · 4417 阅读 · 0 评论 -
PTA 排序(冒泡,插入,希尔,堆排序,归并排序)
介绍了五种常见排序方法,每种方法各有利弊。 1.冒泡排序 一个指针一开始指向最后一个位置,将之前两两比较出来的最大的那个值一步步交换到这个位置上。并且加入监控是否全程没有发生交换的变量flag,可以提前终止循环,代表完成了排序。 /*冒泡排序*/ void Bubble_sort(long a[], int N) { int flag;//一趟冒泡是否发生交换 for (int P = N -...原创 2020-04-19 17:40:31 · 2968 阅读 · 0 评论 -
PTA 最小生成树与拓扑排序
最小生成树 特点: 1.是一棵树。 无回路,N个顶点有N-1条边。 2.是生成树。 包含全部顶点,N-1条边都在图里。 3.边的权重和最小。 主要包括两种算法,一种是让小树慢慢长大的Prim算法(先定一个顶点为起点,然后每次都找到离这棵树最近的那个顶点,将他归进树内,直到正好用掉顶点数N-1条边)。 二是Kruskal算法,将一个个森林(一开始每个节点都是森林)连成树。每次在图中找所有的边中权重最...原创 2020-04-15 02:15:55 · 733 阅读 · 0 评论 -
PTA 最短路径(Dijkstra和Floyd算法)
最短路径问题实际上就是在图中储存好每个点到别的点的最小距离,单源(单起点)问题往往用数组存放,多源问题常用邻接矩阵来处理。 多源问题常用Floyd算法来做,Floyd的核心是:当前I 到J的最小距离为I 到一小部分顶点 再到J的最小距离。然后不断的把K个顶点加到那一小部分顶点的集合中。直到K等于总顶点数N-1,就是整个图的实际多源距离。 例题: 07-图4 哈利·波特的考试 (25分) 哈利·波...原创 2020-04-07 17:25:28 · 4460 阅读 · 0 评论 -
PTA 图
图分为有向图(路径单项)和无向图(路径双向)。 一。存储 1.矩阵存储(要注意无向图时矩阵对称,写入值的时候别漏了)。 /* 图的邻接矩阵表示法 */ #define MaxVertexNum 100 /* 最大顶点数设为100 */ #define INFINITY 65535 /* ∞设为双字节无符号整数的最大值65535*/ typedef int Vertex; ...原创 2020-03-29 17:24:41 · 814 阅读 · 0 评论 -
PTA 堆,哈夫曼树,哈夫曼编码
堆:用于处理优先级(表现为某个值的最大或最小值)问题 特性: 1.用数组表示的***完全二叉树***(这样就可以用数组脚标i来整活了) 2.任一根节点都比左右儿子要大/小(但左儿子并不一定大于/小于右儿子,根据插入顺序来决定) 以下是题目: 树7 堆中的路径 (25分) 将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。 输入格式: 每组测试第1...原创 2020-03-20 16:26:07 · 1460 阅读 · 0 评论 -
PTA 二叉搜索树和二叉平衡树
二叉搜索树 给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。 输入格式: 输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数...原创 2020-03-13 23:58:14 · 528 阅读 · 0 评论 -
PTA 树的结构及前中后序遍历
03-树1 树的同构 (25分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即...原创 2020-03-07 23:43:09 · 349 阅读 · 0 评论 -
PTA数据结构春季班第二单元
第二单元习题 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。 情况1,2是常规输入。 加法运...原创 2020-03-03 22:48:06 · 277 阅读 · 0 评论 -
PTA数据结构春季班第一单元
第一单元习题Maximum Subsequence Sum Given a sequence of K integers { N1, N2 , …, NK}. A continuous subsequence is defined to be { Ni , Ni+1 , …, Nj } where 1≤i≤j≤K. The Maximum Subsequence is the...原创 2020-02-29 02:18:05 · 180 阅读 · 0 评论 -
PTA刷题小结(basic篇)
Basic 1002 题目:读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10的100次方 输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。 知识点: 1.超大整数运算 将整数先读成str然后操作后再转回来。 for ...原创 2020-02-18 01:09:09 · 299 阅读 · 0 评论