随笔分类 -  数据结构

1
摘要:为什么选择跳表目前经常使用的平衡数据结构像B树,红黑树,AVL树等这些,想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。那么在这种情况下,我们就可以用跳表。 阅读全文
posted @ 2019-07-30 14:31 橘子洲头。 阅读(227) 评论(0) 推荐(1)
摘要:1.图的DFS: 即Breadth First Search,深度优先搜索是从起始顶点开始,递归访问其所有邻近节点,比如A节点是其第一个邻近节点,而B节点又是A的一个邻近节点,则DFS访问A节点后再访问B节点,如果B节点有未访问的邻近节点的话将继续访问其邻近节点,否则继续访问A的未访问邻近节点,当所 阅读全文
posted @ 2019-05-19 16:01 橘子洲头。 阅读(1139) 评论(0) 推荐(0)
摘要:1. 图的定义图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的;其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边或弧"(edege)。通常记为,G=(V,E)。 2. 图的种类根据边是否有方向,将图可以划分为:无向图和有向图。 2.1 无向图 阅读全文
posted @ 2019-05-19 14:48 橘子洲头。 阅读(1599) 评论(0) 推荐(0)
摘要:什么是哈希表?哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方。 哈希表充分体现了算法设计领域的经典思想:空间换时间。哈希表是时间和空间之间的平衡。其中的哈希函数是最重要的,“键”通过哈希函数得到的“索引”分布越均匀越好。但是哈希表会失去顺序性。 哈希函数 阅读全文
posted @ 2019-05-01 19:33 橘子洲头。 阅读(228) 评论(0) 推荐(0)
摘要:红黑树介绍红黑树(Red-Black Tree),它一种特殊的二叉查找树。执行查找、插入、删除等操作的时间复杂度为O(logn)。 红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。红黑树的每个节点上都有存储位表示节点的颜色 阅读全文
posted @ 2019-04-22 17:40 橘子洲头。 阅读(386) 评论(0) 推荐(0)
摘要:定义2-3树是平衡的3路查找树,其中2(2-node)是指拥有两个分支的节点,3(3-node)是指拥有三个分支的节点。B-树是一种平衡的多路查找树,2-3树属于b-树,其也同样具有B-树的性质,如m阶B-树,节点至多有m个分支、m-1个关键字;内部节点的分支数至少为m/2取上限;所有叶节点都出现在 阅读全文
posted @ 2019-04-22 16:24 橘子洲头。 阅读(534) 评论(0) 推荐(0)
摘要:AVL树(平衡二叉树)定义 AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,并且拥有自平衡机制。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树。下面是平衡二叉树和非平衡二叉树 阅读全文
posted @ 2019-04-20 10:53 橘子洲头。 阅读(423) 评论(0) 推荐(0)
摘要:定义二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 性 阅读全文
posted @ 2019-04-18 21:26 橘子洲头。 阅读(328) 评论(0) 推荐(0)
摘要:一、已知前序、中序、后序遍历结果的其中两种,还原二叉树。 ①已知前序遍历结果:1,2,4,5,3,6,7 中序遍历结果:4,2,5,1,6,3,7还原二叉树后BFS出结果。 TreeNode.java CreateTree.java: ②已知前序遍历结果:1,2,4,5,3,6,7 后序遍历结果:4 阅读全文
posted @ 2019-04-18 15:52 橘子洲头。 阅读(491) 评论(0) 推荐(0)
摘要:一、查找最大值 二、查找最小值 三、插入节点 四、查找节点 五、修改节点直接调用setData方法即可。 六、删除子节点 七、求深度 阅读全文
posted @ 2019-04-10 22:08 橘子洲头。 阅读(919) 评论(0) 推荐(0)
摘要:二叉树的遍历分为深度优先遍历(DFS)和广度优先遍历(BFS) DFS遍历主要有: 前序遍历 中序遍历 后序遍历 一、递归实现DFSNode.java: 递归遍历: 二、非递归实现DFS(依靠栈) 三、实现层序遍历(依靠队列) 阅读全文
posted @ 2019-04-09 20:02 橘子洲头。 阅读(444) 评论(0) 推荐(0)
摘要:通用树的理论知识 一、树的定义 由一个或多个(n>=0)节点组成的有限集合T,有且仅有一个节点称为根(root),当n>1时,其7余的节点为m(m>=0)个互不相交的有限集合T1,T2,...,Tm。每个集合本身又是棵树,称其为根的子树。注意:空树也是树,树具有递归性。 二、树的相关术语 1. 根: 阅读全文
posted @ 2019-04-09 14:38 橘子洲头。 阅读(454) 评论(0) 推荐(0)
摘要:双端队列(Deque)双端队列是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构。将队列的两端分别称为前端和后端,两端都可以入队和出队。Deque继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中L 阅读全文
posted @ 2019-03-12 21:09 橘子洲头。 阅读(455) 评论(0) 推荐(0)
摘要:普通顺序队列存在的问题在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位。出队时,则是头指针front后移一个单位。像这样进行了一定数量的入队和出队操作后,可能会出现这样的情况:尾指针rear已指到数组的最后有一个元素,即rear==MaxLen-1,此时 阅读全文
posted @ 2019-03-12 20:37 橘子洲头。 阅读(394) 评论(0) 推荐(0)
摘要:队列只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表;进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列);队列具有先进先出(FIFO)的特性。 三种实现方式 顺序存储实现方式 链式存储实现方式 基于LinkedList实现队列结构 阅读全文
posted @ 2019-03-12 15:28 橘子洲头。 阅读(221) 评论(0) 推荐(0)
摘要:栈的特点: 先进后出,就像现实生活中叠盘子和取盘子一样。 三种实现方式: 顺序存储实现方式: 链式存储实现方式: 基于LinkedList实现的栈结构: 阅读全文
posted @ 2019-03-11 22:29 橘子洲头。 阅读(254) 评论(0) 推荐(0)
摘要:一、单向循环链表表中的最后一个节点的指针域指向头结点,整个链表形成一个环。其他的与单链表相同。 (以下图片均来自网络,侵删) 插入操作 删除操作 简单实现 循环单链表模拟击鼓传花游戏 二、双向循环链表从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表 阅读全文
posted @ 2019-03-05 11:59 橘子洲头。 阅读(6742) 评论(0) 推荐(0)
摘要:什么是双向链表?每一个结点不仅配有next引用,同时还有一个prev引用,指向其上一个结点(前驱结点), 没有前驱的时候就为NULL。 (以下图片均来自网络,侵删) 与单链表的区别?和单向链表相比有以下优势: 插入操作 删除操作 实现 阅读全文
posted @ 2019-03-01 23:31 橘子洲头。 阅读(2907) 评论(0) 推荐(0)
摘要:单链式存储线性列表线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的 (图片来自网络,侵删) 存储单元由两部分组成,数据源和指针,数据源放数据,指针指向下个存储单元。LinkedList采用的就是链式存储线性表。 链式线性表的插入操作 链 阅读全文
posted @ 2019-02-28 22:22 橘子洲头。 阅读(548) 评论(0) 推荐(0)
摘要:一个线性表是由n(n≥0)个数据元素所构成的有限序列。 线性表逻辑地表示为:(a0,a1,…,an-1)。其中,n为线性表的长度,n=0时为空表。i为ai在线性表中的位序号。 存储结构:1.顺序存储,数据是存放是连续的 2.链式存储,数据存放不是连续的,但之间有联系保证找到下一个数据。 顺序存储的线 阅读全文
posted @ 2019-02-28 17:01 橘子洲头。 阅读(619) 评论(0) 推荐(0)

1