数据结构学习笔记
记录自己对数据结构的学习。
数据结构的定义:相互之间存在一种或者多种特定关系 的 数据元素 的集合。
数据结构通常有四种结构: 集合,线性结构,树形结构,图状结构(网状结构)
syrdbt
这个作者很懒,什么都没留下…
展开
-
深度优先搜索(DFS) 学习、Java代码实现
深度优先搜索(DFS)的基本思想:从图中的某个顶点v出发,然后依次从未被访问的 v的邻接点开始深度优先搜索,直至图中所有和v路径相通的顶点都被访问,然后选择另外一个没有被访问的顶点开始深度优先搜索。1.概述深度优先搜索(DFS)的基本思想:从图中的某个顶点v出发,然后依次从未被访问的 v的邻接点开始深度优先搜索,直至图中所有和v路径相通的顶点都被访问...原创 2019-07-12 21:57:19 · 17003 阅读 · 7 评论 -
堆排序学习、Java代码实现
堆排序(HeadSort)只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。堆的定义:n个元素的序列 {k(1),k(2),... k(n)} ,当其满足k(i)<=k(2*i)&& k(i)<= k(2*i+1)或者k(i)>=k(2*i) && k(i)>= k(2*i+1),称这个序列为堆。i...原创 2019-07-03 19:55:08 · 267 阅读 · 0 评论 -
二叉树Java代码实现(Binary Tree)
二叉树:二叉树是一种树形结构,它的特点是一个结点至多有两棵子树,并且二叉树的子树有左右之分。1.二叉树的遍历二叉树遍历有三种方式:先序遍历、中序遍历、后序遍历。先序遍历:访问根节点、先序遍历左子树、先序遍历右子树。中序遍历:中序遍历左子树、访问根节点、中序遍历右子树。后序遍历:后续遍历左子树、后续遍历右子树、访问根节点。先序遍历,访问根节点、先序遍历左子树、先序遍历右...原创 2019-05-16 18:50:57 · 8940 阅读 · 0 评论 -
归并排序(Merging Sort)学习和Java代码实现
1.归并排序“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。归并排序的基本思路:(1)假设初始序列有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1。(2)然后两两归并,得到[n/2]个长度为2或1(n为奇数的情况)的有序子序列;(3)两个有序子序列不断归并,重复上一步...(4)最终得到一个长度为n的子序列。举一个归并的例子,相同颜色的值为一...原创 2019-04-20 14:48:29 · 256 阅读 · 0 评论 -
单链表 & 循环链表 Java 代码实现
单链表,用一组地址任意的存储单元去存放线性表中的数据元素。链表中的数据是以结点来表示的。结点的构成:元素(数据元素的映象) +指针(指示后继结点存储位置)。1.概述单链表,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的。结点的构成:元素(数据元素的映象) +指针(指示后继结点存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数...原创 2019-03-30 21:35:32 · 595 阅读 · 0 评论 -
快排Java代码实现(Quick Sort)
1. 快排算法思路基本思想:通过一趟快速排序将待排数组分割成独立的两份部分;其中一部分数组的值均比另一部分数组的值小,则可分别对着两部分数组继续进行排序,以达到整个序列有序。快排的平均时间复杂度为n*log(n),最坏的时间复杂度为n^2。一趟快速排序:首先先选一个值(通常选择数组第一个值)作为枢轴,然后按下述原则重新排列其余的值,将数组中所有小于枢轴的值放在枢轴前面,数组中所有...原创 2019-03-22 16:12:54 · 3541 阅读 · 0 评论 -
归并排序(C++代码实现)
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否...原创 2017-09-11 21:04:10 · 1458 阅读 · 0 评论 -
最小生成树 Kruskal 学习、代码实现
1.概述Kruskal最小生成树算法,算法的大概思路为:将所有边升序排列,然后从值最小的边开始取边,如果当前的边添加到已取的边中不构成环,则取该边,否则舍弃这条边,去判断下一条边,重复上述操作一直到取到n-1条边,这n-1条边和n个节点就是最小生成树。一个例子,基于这样的一个图:利用 Kruskal生成最小生成树的过程如下所示:2.代码实现Kruskal最...原创 2019-04-13 21:44:00 · 499 阅读 · 0 评论 -
Bellman-Ford 代码实现
目录1. 算法学习1.1存在负环就没有最短路1.2 Bellman-Ford的适用情况1.3 核心算法思想2. 代码实现3. 代码检验,poj 1860Currency Exchange1. 算法学习1.1存在负环就没有最短路首先需要理解"存在负环就没有最短路",原因:你可以一直在这个负环打圈,路径权值会不断减小,不断地趋近于负无穷...原创 2019-03-17 11:03:56 · 1175 阅读 · 0 评论 -
kmp代码实现
目录1. 代码实现2. oj题进行代码验证2.1 验证kmp_index ,求模式串在主串 pos位置 字符之后的位置2.2 验证kmp_count,求模式串在主串中出现了几次1. 代码实现#include <iostream>#include <cstring>using namespace std;const int ...原创 2018-04-28 21:35:26 · 3283 阅读 · 5 评论 -
最短路 dijkstra 学习、代码实现
1.概述dijkstra单源最短路,单源最短路即把一个点当作源点,求得这个点到其它点的最短路。算法的基本思路:首先用一个辅助数组pos[ ], pos[i]就是源点到结点i的最短距离,如果邻接矩阵存储,pos[ ]也就是 a[i][ ]。一个标记数组vis[], vis[i]为true则已经找到源点到这个点的最短距离,为false则还未确定源点到这个点的最短距离...原创 2017-10-10 14:31:02 · 436 阅读 · 0 评论 -
最短路 Floyed 代码实现
1.概述Floyed多源最短路,即每个点都为节点,简单的说就是求每对节点之间的最短距离。基本算法思想:Floyed的核心代码只有如下几行,不断更新从节点i到节点j的距离,这里的更新条件:“节点i到节点k的距离” + “节点k到节点j的距离”小于“当前节点i到节点j的距离” 。 for(int k=1; k<=n; k++) { ...原创 2017-10-11 21:31:24 · 451 阅读 · 0 评论 -
最小生成树(Prim)学习、代码实现
目录1. 概述2. 代码实现3. 代码验证:hdu 4463Outlets参考文献1. 概述初始化一个数组U,存储已经遍历的节点(数组U初始化可以为任何一个,一般为v1),不断的找与“已遍历节点距离最短”的节点加入到数组U中,等到所有的节点都加入到U中,所选择的n-1条“最短边”和n个节点即为该树的最小生成树。举一个例子,图中有 6个节点(V1,V2、V3...原创 2017-10-09 20:50:22 · 1344 阅读 · 2 评论