随笔分类 - 数据结构与算法
摘要:三、删除 1、介绍 红黑树的删除类似于排序二叉树,排序二叉树主要分为三种情况: (1)删除没有左孩子且没有右孩子的结点。即:度为0。 (2)删除只有左(右)孩子的结点。即:度为1。 (3)删除有左孩子且有右孩子的结点。即:度为2。 由于红黑树还有颜色的区分,所以在上述三种情况的基础上加上颜色,就是六
阅读全文
摘要:一、概述 1、介绍 红黑树是一种自平衡的排序二叉树,常用于关联数组、字典,在各种语言的底层实现中被广泛应用,Java 的 TreeMap 和 TreeSet 就是基于红黑树实现的,在 JDK 8 的HashMap中也有应用。 红黑树是在排序二叉树的基础上定义的,且还要满足以下性质(重要):(请务必先
阅读全文
摘要:一、青蛙跳台阶&斐波那契数列 1、问题 一只青蛙跳台阶,每次可以跳 1 层或 2 层。青蛙跳到 n 层一共有多少种跳法? 2、思想 先把问题规模缩小,考虑 n = 1时,n = 2的解。那么,显然有: (1)边界条件:dp[1] = 1、dp[2] = 2 (2)再考虑 n = 3时,逆向思维一下,
阅读全文
摘要:一、介绍 1、介绍 递归:递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。迭代和递归区别:迭代使用的是循环结构,递归使用的选择结构。使用递归能使程序的结构更清晰、更简洁、更容易让人理解,从而减少读懂代码的时间。其时间复杂度就是递归的次数。
阅读全文
摘要:一、概述 1、介绍 堆:是具有以下性质的完全二叉树,建堆的时间o(n)。 大顶堆:根结点 >= 左右孩子结点,左右孩子不要求。 小顶堆:根结点 <= 左右孩子结点,左右孩子不要求。 大顶堆: 小顶堆: 性质:由于堆是完全二叉树,对任意结点 i 左孩子是 2i + 1,右孩子是 2i + 2,则: ①
阅读全文
摘要:一、概述 1、介绍 静态查找:数据集合稳定,不会添加,删除元素的查找操作。 动态查找:数据集合在查找的过程中会添加,删除元素的查找操作。 2、查找方式 静态查找:不妨使用线性表结构组织数据,可以使用顺序查找算法;若对关键词排序,可以使用折半查找算法或斐波那契查找算法。 动态查找:可以使用二叉排序树的
阅读全文
摘要:一、排序 1、介绍 影响排序算法性能的几个要素:时间性能、辅助空间、算法的复杂性。 内部排序:将需要处理的所有数据都加载到内存中进行排序。包括交换式排序、选择式排序、插入式排序。 外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括合并排序、直接合并排序。 2、分类 交换式排序
阅读全文
摘要:一、图 1、介绍 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 无向完全图:在无向图中,任意两个顶点之间都存在边。含有 n 个顶点的无向完全图有 n*(n - 1)/2 条边。 有向完全图:在有
阅读全文
摘要:一、排序二叉树(二叉查找树、二叉搜索树) 1、介绍 排序二叉树(Binary Sort Tree),性质:左孩子 < 根结点 < 右孩子。在一般情况下,查询效率比链表要高。 按照中序遍历可以得到一个从小到大的有序序列。 2、创建、添加、删除 创建和添加简单,删除情况比较复杂,有三种情况考虑: ①删除
阅读全文
摘要:一、树 1、介绍 树(Tree)是n(n>=0)个结点的有限集。当n = 0时成为空树。 2、树的储存结构 双亲表示法、孩子表示法、孩子兄弟表示法(未列举)。 双亲表示法:以双亲作为索引的关键词的一种存储方式。 我们可以根据某结点的parent指针找到它的双亲结点,所用的时间复杂度是o(1),索引到
阅读全文
摘要:二、队列 1、介绍 队列是一种先进先出的线性表,它只允许在一端(队尾)进行插入操作,在另一端(队头)进行删除操作。可以用数组或链表来实现,一般用链表来实现,简称为链队列,建立在内存的动态区。 2、队列的顺序存储实现 顾名思义,用顺序表的方法实现,通常用数组。队列的顺序储存结构: 下面用数组实现队列:
阅读全文
摘要:一、栈 1、介绍 栈是一种先进后出的线性表,它要求只能在表尾(栈顶)进行插入和删除操作。可以用数组或链表来实现,一般用顺序表来实现。 栈的应用: ①子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。 ②处理递归调用:和子程序的调用类似,
阅读全文
摘要:一、线性表 1、介绍 由零个或多个数据元素组成的有限序列,有序表。 数据类型:一组性质相同的值的集合及定义在此集合上的一些操作的总称。 2、顺序存储结构 顺序表:用一组地址连续的存储单元存放数据。 特点:具有随机存储结构的特点,时间复杂度为o(1)。存、读数据时,不管哪个位置,时间复杂度都是o(1)
阅读全文
摘要:一、概述 1、介绍 程序 = 数据结构 + 算法。简单的说,数据结构就是关系,就是数据元素相互之间存在的一种或多种特定关系的集合。传统上,把数据结构分为逻辑结构和物理结构。 物理结构:数据在计算机中的实际存储形式。 逻辑结构:数据元素之间的逻辑关系。 2、物理结构 根据定义,就是研究如何把数据元素存
阅读全文