数据结构与算法–二叉查找树 上节中学习了基于链表的顺序查找和有序数组的二分查找,其中前者在插入删除时更有优势,而后者在查找上效率更高。能不能将这两个优点结合起来呢?这就是接下来要学的二叉查找树。 首先,二叉查…
数据结构与算法--图的概念
数据结构与算法–图的概念 经过之前的学习,我们知道了线性表是一对一的关系,树是一对多的关系,而且树具有层次结构。图是一种更为复杂的数据结构,就好像人与人之间的关系网一样复杂。图是由若干顶点和边(两个顶点间的连…
数据结构与算法--图的实现(邻接表、邻接矩阵、边的数组)
数据结构与算法–图的实现(邻接表、邻接矩阵、边的数组) 应该用哪种数据结构实现图呢?主要有如下三种: 邻接矩阵 对一个拥有V个顶点的图,建立一个V*V的布尔数组,如果顶点i到j之间有边连接,则定义i行j列的元…
数据结构与算法--图论之寻找连通分量、强连通分量
数据结构与算法–图论之寻找连通分量、强连通分量 寻找无向图的连通分量 使用深度优先搜索可以很简单地找出一幅图的所有连通分量,回忆连通图的概念:如果从任意顶点都存在一条路径达到任意一个顶点,则称这幅图是连通图。…
数据结构与算法--图的搜索(深度优先和广度优先)
数据结构与算法–图的搜索(深度优先和广度优先) 有时候我们需要系统地检查每一个顶点或者每一条边来获取图的各种性质,为此需要从图的某个顶点出发,访遍图中其余顶点,且使得每一个顶点只被访问一次,这个过…
数据结构与算法--散列表
数据结构与算法–散列表 之前学习了基于链表的顺序查找、基于有序数组的二分查找、二叉查找树、红黑树,这些算法在查找某个key时,都免不了在所有键值对中一一比较或者折半比较。有没有办法通过key直接定位到valu…
数据结构与算法--优先队列和堆排序
数据结构与算法–优先队列和堆排序 在某些数据处理的例子中,总数据量太大,无法排序(甚至无法全部装进内存)。例如,需要从十亿个元素中选出最大的十个,你真的想把一个10亿规模的数组排序吗?但有了优先队列,你只用一…
数据机构与算法--索引优先队列
数据机构与算法–索引优先队列 图片来自nullzx的博客园 索引优先队列,用一个索引数组保存了元素在数组中的位置。在插入队列中时,可看作将一个整数和一个对象相关联,使得我们可以引用队列中的元素。比如在Dijk…
数据结构与算法--循环链表
数据结构与算法–循环链表 单循环链表的实现 单链表的实现中,最后一个结点始终指向null,表示达到表尾部。位于last这个位置,想要访问其他结点是不可能的了,因为我们既没有prev指针指向前一个结点,last…
数据结构与算法--双向链表
数据结构与算法–双向链表 单向链表的指向是单向的,当前结点只指向它的后一个结点。同样,遍历的时候也只有一个顺序。如果需要访问前一个结点,即使是单向循环链表也需要循环size - 1次。有没有办法更方便的访问前…
数据结构与算法--从平衡二叉树(AVL)到红黑树
数据结构与算法–从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树。算法的性能取决于树的形状,而树的形状取决于插入键的顺序。在最好的情况下,n个结点的树是完全平衡的,如下图“最好情况”所示,此时树的高度为⌊…
数据结构和算法--二叉树的实现
数据结构和算法–二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子树,注意是最多。这意味着任意结点的度小于等于2。 子树有左右之分;某个结点只有一个孩子时,它位于…