图解:平衡二叉树,AVL树
摘要:学习过了二叉查找树,想必大家有遇到一个问题。例如,将一个数组{1,2,3,4}依次插入树的时候,形成了图1的情况。有建立树与没建立树对于数据的增删查改已经没有了任何帮助,反而增添了维护的成本。而只有建立的树如图2,才能够最大地体现二叉树的优点。 在上述的例子中,图2就是一棵平衡二叉树。科学家们提出平
阅读全文
posted @
2019-09-19 23:18
Alan_Fire
阅读(766)
推荐(0)
广度优先遍历
摘要:观察下面两个无向图: 这两个图其实是一样的,只是画法不同罢了。第一张图更有立体感,第二张图更有层次感,并且把A点置为顶点(事实上图的任何一点都可以做为顶点)。 一、用数组来存放顶点 vexs[0] = ‘A’ vexs[1] = ‘B’ vexs[2] = ‘C’ vexs[3] = ‘D’ vex
阅读全文
posted @
2019-05-15 00:07
Alan_Fire
阅读(9478)
推荐(0)
链表
摘要:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 一、链表的创建操作 刚开始,链表为
阅读全文
posted @
2019-05-14 23:54
Alan_Fire
阅读(291)
推荐(0)
Kruskal算法详解
摘要:本章介绍克鲁斯卡尔算法。和以往一样,本文会先对克鲁斯卡尔算法的理论论知识进行介绍,然后给出C语言的实现。后续再分别给出C++和Java版本的实现。 最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例
阅读全文
posted @
2019-05-14 18:43
Alan_Fire
阅读(2427)
推荐(0)
哈希表详解
摘要:Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来
阅读全文
posted @
2019-05-13 10:17
Alan_Fire
阅读(1314)
推荐(0)
小朋友学数据结构(11):堆排序
摘要:小朋友学数据结构(11):堆排序 (一)什么是堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者 Key[i]>=Key[2i+1]&&key>=key[2i+2], 即任何一非叶节点的关键字不大于或者不小于其左右孩
阅读全文
posted @
2018-09-07 23:41
Alan_Fire
阅读(280)
推荐(0)
小朋友学数据结构(10):基数排序
摘要:小朋友学数据结构(10):基数排序 一、基本思想 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位(即个位数)开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 与其他排序不同的是,基数排序不涉及数的交换。 基数排序是一种
阅读全文
posted @
2018-09-07 23:41
Alan_Fire
阅读(225)
推荐(0)
小朋友学数据结构(9):希尔排序
摘要:小朋友学数据结构(9):希尔排序 (一)基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 (二)例子 有一个数组,其原始数组为: 2-1.png 取初始增量gap = len
阅读全文
posted @
2018-09-07 23:40
Alan_Fire
阅读(172)
推荐(0)
小朋友学数据结构(8):直接插入排序
摘要:小朋友学数据结构(8):直接插入排序 (一)基本思想 在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 1-1.jpg (二)C语言代码实现 #include<stdio.h>
阅读全文
posted @
2018-09-07 23:39
Alan_Fire
阅读(135)
推荐(0)
小朋友学数据结构(7):快速排序
摘要:小朋友学数据结构(7):快速排序 一、快速排序 (一)基本思想 选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。 (二)例子 6-1.p
阅读全文
posted @
2018-09-07 23:38
Alan_Fire
阅读(200)
推荐(0)
小朋友学数据结构(5):顺序查找法
摘要:小朋友学数据结构(5):顺序查找法 查找是最常见的数据操作之一,也是数据结构的核心运算之一,其重要性不言而喻。 顺序查找是最简单的查找策略,对于小规模的数据,顺序查找是个不错的选择。 (一)基本思想 从数据的第一个元素开始,依次比较,直到找到目标数据或查找失败。 1 从表中的第一个元素开始,依次与关
阅读全文
posted @
2018-09-07 23:37
Alan_Fire
阅读(631)
推荐(0)
小朋友学数据结构(6):折半查找法
摘要:小朋友学数据结构(6):折半查找法 折半查找法又称为二分查找法。 (一)基本思想 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一
阅读全文
posted @
2018-09-07 23:37
Alan_Fire
阅读(649)
推荐(0)
小朋友学数据结构(4):归并排序
摘要:小朋友学数据结构(4):归并排序 (一)基本思想 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 7-1.jpg (二)代码实现 import java.util.Arrays; p
阅读全文
posted @
2018-09-07 23:35
Alan_Fire
阅读(409)
推荐(0)
小朋友学数据结构(3):二叉树的建立和遍历
摘要:小朋友学数据结构(3):二叉树的建立和遍历 一、基本概念 BinaryTree.png 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树。 根结点:最顶部的那个结点叫做根结点,根结点是所有子结点的共同祖先。比如上图中的“7”结点就是根结点。 子结点:除了根结点外的结点,都叫子结点。 叶子结点:没
阅读全文
posted @
2018-09-07 23:33
Alan_Fire
阅读(296)
推荐(0)
小朋友学数据结构(2):栈
摘要:小朋友学数据结构(2):栈 栈是一种先入后出的数据结构。 如下图所示,入栈的顺序为1、2、3;出栈的顺序则反过来:3、2、1。 stack.png 可以想象往一个箱子里放书,先放进去的书必然在箱子的底部,最后放进去的书在箱子的顶部。拿书的时候则要先拿顶部(后放进去)的书,最先放进去的书最后才能拿出来
阅读全文
posted @
2018-09-07 23:32
Alan_Fire
阅读(165)
推荐(0)
小朋友学数据结构(1):约瑟夫环的链表解法、数组解法和数学公式解法
摘要:约瑟夫环的链表解法、数组解法和数学公式解法 约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。在那里
阅读全文
posted @
2018-09-07 23:31
Alan_Fire
阅读(708)
推荐(0)