基础数据结构【完结】
文章平均质量分 72
最复杂的数据结构是图,这里讲述除图之外的数据结构
醒过来摸鱼
18年考研数学140+,211硕士毕业,精通算法,单身,女
展开
-
1.1 一维数组
数组是最简单的,也最基础的数据结构。数组是一个有序的数据集合,用索引(或者叫下标)访问数据。在大多数编程语言,比如C/C++/java/javascript重,数组的索引都是以0开始。它的逻辑结构是一段连续的空间。 如下图所示: 1 1 2 3 5 8 0 1 2 3 ...原创 2022-01-08 18:59:08 · 890 阅读 · 0 评论 -
1.2 多维数组
以LCS问题介绍多维数组的用法原创 2022-01-09 15:40:08 · 397 阅读 · 1 评论 -
2.1 链表
本文主要介绍双向列表的实现。原创 2022-01-09 23:46:11 · 475 阅读 · 0 评论 -
2.2 数组列表
原先的文章改成了markdown编辑器原创 2023-04-03 11:32:18 · 125 阅读 · 0 评论 -
2.3 循环队列
队列的特征是先进先出,有个缩写FIFO,是first input first output的缩写。在实际开发过程中,有许多队列的例子。因为先进先出,就像现实中的排队,所以广泛用于多线程中,用于保证多线程中各个线程的公平性。队列的实现有多种形式,比如可以直接使用链表实现队列。其实数组也可以实现,但是数组列表不合适。因为前文介绍过,数组列表从头部移除,性能十分低下。所以这里简单介绍下数组队列的实现。前面讲过数组列表使用一个尾部索引来表示尾部位置。那么我们加上一个头部位置呢?那样就可以不频繁挪动数组元素啦原创 2022-01-11 14:33:39 · 287 阅读 · 0 评论 -
2.4 栈
栈的特征是先进后出,英文缩写为FILO(first in, last out),也就是说所有的添加删除操作,只在尾部进行。根据前面我们的学习,链表、数组列表、循环队列都适合当作栈使用。栈在计算机世界最广泛的应用就是程序函数的调用,因为函数内部还会调用调用,所以是一个树状结构,而函数调用必须先执行最内层的子函数,所以这相当于一个深度优先搜索(DFS)算法,而支撑深度优先搜索算法的核心数据结构就是栈。 这里不讨论深度优先搜索。 先以一个常见的需求表达式解析开始。这里...原创 2022-01-11 21:44:11 · 491 阅读 · 0 评论 -
2.5 Floyd链表查环算法
简述了Floyd双指针算法原创 2022-06-02 11:31:26 · 171 阅读 · 0 评论 -
2.6 Brent链表查环算法
简述了Brent算法,给出了Java实现原创 2022-06-11 19:36:47 · 312 阅读 · 0 评论 -
3.1 二叉堆
现实中总存在这样一类需求:从一个集合中每次取出的数据都是最小值或者最大值。比如说股市的连续竞价阶段的撮合交易,需要每次取出卖方的最低价和买方的最高价进行撮合交易。如果用数组列表,从尾部插入时进行排序,然后取的时候从尾部取出。这个想法似乎不错。但是1964年,J.W. J. Williams发明了一种新的数据结构,将这个问题用更好的算法和数据结构解决。这个数据结构就是堆。 堆,逻辑上它是一棵满二叉树,而物理上它是一个数组。所谓的满二叉树,形象地说,就是除最下面一层外,其他层都...原创 2022-01-12 21:07:19 · 257 阅读 · 0 评论 -
3.2 二项堆
本文介绍二项堆的结构与实现原理原创 2022-01-13 21:38:56 · 523 阅读 · 0 评论 -
3.3 斐波那契堆
结构斐波那契堆的基础是可合并堆。数据结构是一个森林。也就是N棵树。这点和二项堆一样。这个结构没有二项堆那么多的要求。Rank的概念,是子节点的数目与二项堆不同的是,斐波那契堆的底层链表要成环,要双向链表。而斐波那契堆的节点,是这样的。每个节点有parent,只有一个child。但是每个child都是个双向链表节点。所以斐波那契节点实际上是多了两个属性的双向链表节点。所以继承自LinkedListNode。斐波那契堆节点主要有以下属性:# _*_ coding:utf-8 _*_fro原创 2022-01-14 19:45:31 · 542 阅读 · 0 评论 -
4.1跳表
简单介绍跳表的原理,并附带java语言的实现代码。原创 2022-01-20 18:02:40 · 650 阅读 · 0 评论 -
4.2 哈希表
介绍哈希表的实现原理和Java代码实现。原创 2022-01-22 20:10:17 · 616 阅读 · 0 评论 -
5.1位集
简单介绍位集原创 2022-01-26 22:48:24 · 321 阅读 · 0 评论 -
6.1 树的BFS与DFS搜索
树的BFS与DFS搜索原创 2022-01-27 21:05:22 · 732 阅读 · 0 评论 -
6.2 二叉树遍历
介绍了二叉树的三大遍历(前序、中序、后序)算法及应用原创 2022-02-05 20:40:28 · 1277 阅读 · 0 评论 -
6.3 AVL树
简单介绍AVL树原创 2022-02-01 20:49:43 · 830 阅读 · 0 评论 -
6.4 红黑树
详细介绍了红黑树的所有场景,图解丰富原创 2022-02-03 23:12:41 · 688 阅读 · 0 评论 -
6.5 赫夫曼树
简单介绍赫夫曼树原创 2022-01-28 18:54:03 · 442 阅读 · 0 评论 -
6.6 van Emde Boas树
简单介绍了固定集合内查找元素的v树算法原创 2022-02-06 23:10:41 · 1350 阅读 · 4 评论 -
6.7 并查集
简要介绍并查集Disjoint set及给出java与python实现原创 2022-02-16 18:01:32 · 284 阅读 · 1 评论 -
6.8 B-树
介绍B-树的实现原创 2022-02-12 15:37:36 · 466 阅读 · 1 评论 -
6.9 B+树
介绍了B+树的插入与删除。原创 2022-02-25 14:07:22 · 565 阅读 · 2 评论 -
6.10 Fenwick树
本文详细介绍了Fenwick树的原理。原创 2022-02-14 21:40:48 · 1186 阅读 · 0 评论 -
6.11 2-3-4树
简单说明了为什么红黑树同构于B-树原创 2022-02-17 17:16:32 · 306 阅读 · 0 评论 -
6.12 线段树
简单介绍段树的实现原创 2022-02-18 18:57:58 · 456 阅读 · 1 评论