数据结构
Biexiansheng
爱技术,爱编程
展开
-
数据结构之红黑树
1、什么是红黑树? 红黑树和红色和黑色这两种颜色有关,事实上,在红黑树中,对每一个节点都附着一个颜色,或者是红色或者是黑色。红黑树首先是一棵二分搜索树,这一点和AVL树是一样的,红黑树也是一种平衡二叉树,红黑树在二分搜索树中添加了一些其它的性质,来保证红黑树不会退化成链表,来保证自己在某种情况下是一种平衡二叉树。 如果红黑树的节点个数是n的话,相应的最大的高度是2logn。因为在最次的...原创 2020-03-27 12:07:43 · 796 阅读 · 1 评论 -
数据结构之线段树
1、什么是线段树(也称为区间树)Segment Tree。为什么使用线段树,线段树解决了什么问题,对于有一类问题,我们关心的是线段(或者区间)。 比如,最经典的线段树问题,区间染色问题。另一类经典问题就是区间查询。这两种经典问题,可以使用数组来实现,如果使用数组来进行更新和查询操作的话,时间复杂度是O(n),但是使用线段树的时候,更新操作和查询操作的时间复杂度可以变成O(logn)。 ...原创 2020-03-27 12:06:14 · 340 阅读 · 0 评论 -
数据结构之优先队列
1、优先队列的底层实现可以使用最大堆进行实现,由于优先队列本身就是一个队列,所以可以复用队列的接口。2、首先,将定义好的Queue接口,创建好,可以让优先队列实现该接口之后,实现这些接口的方法。 1 package com.queue; 2 3 /** 4 * 5 */ 6 public interface Queue<E> { 7 8 /**...原创 2020-03-27 12:05:35 · 505 阅读 · 0 评论 -
数据结构之堆
树结构的不同形态,堆、线段树、字段树、并查集,四种不同的树形数据结构。1、优先队列,本身就是一种队列。普通队列,先进先出,后进后出。优先队列,出队顺序和入队顺序无关,和优先级有关,优先级高者先得,优先级高的先出队。类别 入队 出队(拿出最大元素) 普通线性结构(数组、链表等) O(1),直接将新的元素扔进去。 O(n),需要扫描一遍元素,找出其优先级最高...原创 2020-03-27 12:03:29 · 605 阅读 · 0 评论 -
数据结构之映射Map
1、映射Map,存储键值数据对的数据结构(key,value),可以根据键key快速寻找到值Value,可以使用链表或者二分搜索树实现的。首先定义一个接口,可以使用链表或者二分搜索树进行实现。 1 package com.map; 2 3 /** 4 * @ProjectName: dataConstruct 5 * @Package: com.map 6 * @Cla...原创 2020-03-27 12:02:15 · 377 阅读 · 0 评论 -
数据结构之集合Set
1、高层的数据结构,集合Set和映射Map,什么是高层的数据结构呢,比如说是栈和队列,这种数据结构更像是先定义好了使用接口,有了这些使用接口,包括数据结构本身所维持的一些性质,可以很方便的放入到一些应用中,但是底层实现可以多种多样的,比如栈和队列,底层实现既可以是动态数据,也可以是链表。 集合就是承载元素的容器,集合Set中有一个重要的特性,就是每个元素在集合中只能存在一次,可以快速帮助去重...原创 2020-03-27 12:01:31 · 308 阅读 · 1 评论 -
数据结构之树-第二篇
数据结构之树-第一篇1、此时,将元素30从队首拿出来,进行访问,之后将30的左孩子29、右孩子42入队,那么此时队首元素就是13了。此时,将将元素13从队首拿出来,进行访问,之后将13的左孩子、右孩子入队,由于13是叶子节点没有左右孩子,所以没有元素入队了。此时,看队首元素是22,将元素22从队首拿出来,进行访问,之后将22的左孩子、右孩子入队,由于22是叶子节点没有左右孩子,所以...原创 2020-03-27 12:00:17 · 301 阅读 · 0 评论 -
数据结构之树-第一篇
1、二分搜索树,数据存储的方式是一种树结构。而线性数据结构,把所有的数据排成一排的。为什么需要树结构呢,因为树结构本身是一种天然的组织结构,使用树结构非常高效。将数据使用树结构存储后,效率是出奇的高效。 二分搜索树(Binary Search Tree)具有一定的局限性,所以引入了平衡二叉树,平衡二叉树包含了AVL和红黑树等等。当算法需要一些特殊的操作的时候,将数据组织成树结构,会针对某一类...原创 2020-03-24 11:34:02 · 286 阅读 · 0 评论 -
数据结构之链表与递归
1、提起链表,有一块非常重要的内容,就是递归,这是因为链表本身具有天然的递归性,同时,链表也是一种结构非常简单的数据结构,使得链表是一种非常好的来学习和研究递归这种逻辑机制的数据结构。2、使用一个简单的案例,数组求和,使用递归算法进行计算。案例,如下所示: 1 package com.array; 2 3 /** 4 * 数组求和,使用递归算法进行计算。 5 * <p...原创 2020-03-24 11:32:35 · 1433 阅读 · 0 评论 -
数据结构之链表,使用链表实现栈以及使用链表实现队列
1、结合之前实现的链表这个数据结构,如果只对链表的头部进行增加和删除,时间复杂度是O(1)的,只对链表的头部进行查询的话,时间复杂度是O(1)的。那么,满足这样的数据结构是什么呢,就是栈,栈这种数据结构是后入先出的,或者先进后出的,只对栈的一端,就是栈顶进行操作,无论是添加元素、删除元素、查询元素,都是在栈顶进行的。所以对于链表来说,可以将链表的头部当作栈顶,用链表做为栈的底层实现来实现一个栈。...原创 2020-03-24 11:31:57 · 341 阅读 · 0 评论 -
数据结构之链表
1、线性数据结构,动态数组、栈、队列,底层依托静态数组,靠resize解决固定容量问题。2、为什么链表很重要? 1)、最基础的动态数据结构,链表。真正得动态数据结构,最简单的一种动态数据结构。更为复杂的有二分搜索树、平衡二叉树、红黑树等等。 2)、链表设计到一个,更深入的理解引用(或者在C++中称为指针)。 3)、链表帮助更深入的理解递归。链表本身有非常清晰的递归结构的,只不...原创 2020-03-24 11:29:30 · 466 阅读 · 0 评论 -
数据结构之队列
1、队列Queue,队列也是一种线性结构,相比数组,队列对应的操作是数组的子集,只能从一端(队尾)添加元素,只能从另一端(队首)取出元素。队列是一种先进先出的数据结构(或者称为先到先得),First In First Out(简称FIFO)。2、封装的数组的代码,可以实现增加,修改,删除,查询,动态扩容,缩容,判断是否为空等等方法。 1 package com.company; 2...原创 2020-02-29 12:22:20 · 366 阅读 · 0 评论 -
数据结构之数组
1、数据结构研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据。 数据结构包含三种结构,线性结构,树结构,图结构。其中,线性结构包含数组,栈,队列,链表,哈希表等等。树结构包含二叉树,二分搜索树,AVL树,红黑树,Treap,Splay,堆,Tril,K-D树,并查集,哈夫曼树等等。图结构包含邻接矩阵,邻接表。2、时间复杂度O(1), O(n), O(...原创 2020-02-29 12:20:38 · 325 阅读 · 0 评论