这里主要了解java中和集合相关的数据结构,只是简单了解一下这些常见的数据结构,不作过于深入的学习。

数据存储常用的结构有:栈、队列、数组、链表和红黑树。

 

栈:也称堆栈,只允许在同一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。

栈的特点:(1)先进后出

                  (2)栈的入口、出口都是栈顶

                  

java 手动导出堆栈 java堆栈数据结构_数组

压栈:存元素,即把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。

弹栈:取元素,即把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。

 

队列

队列:简称队,只允许在表的一端进行插入,而在表的另一端进行删除。

队列的特点:(1)先进先出(就像火车过隧道一样)

                     (2)队列的入口、出口各占一侧

                     

java 手动导出堆栈 java堆栈数据结构_数组_02

 

数组

数组:是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。

数组的特点:

      (1)查询快

             数组的地址是连续的,通过数组的首地址可以找到数组,通过数组的索引可以快速查找某一个元素

      (2)增删慢

             数组的长度是固定的,想要增加或者删除一个元素必须要创建一个新数组,把原数组的数据复制过来

 

链表

链表:是由一系列节点node组成,一个节点包含了一个数据域(存储数据)和两个指针域(存储地址)。

链表分为:单向链表 、双向链表

      (1)单向链表:链表中只有一条链,不能保证元素的顺序(存储元素和取出元素的顺序有可能不一致)

      (2)双向链表:链表中有两条链,有一条链是专门记录元素的顺序,是一个有序的集合

链表的特点:(1)查询慢

                               因为链表中的地址不是连续的,每次查询元素都必须从头开始查询

                      (2)增删快

                                因为链表结构增加或者删除一个元素对链表的整体结构没有影响,所以增删快

                                增加元素:只需要修改连接下个元素的地址即可

                                删除元素:只需要修改连接下个元素的地址即可

 

红黑树

二叉树:每个节点上最多只能有两个子节点的有序树,顶上的叫根节点,两边被称为“ 左子树 ” 和 “ 右子树 ”

                  

java 手动导出堆栈 java堆栈数据结构_java 手动导出堆栈_03

 这里说的红黑树是一种特殊的二叉树,它本身就是一颗二叉查找树,将节点插入后,该树仍然是一颗二叉查找树。

红黑树的约束:

                    (1)节点可以是红色或者黑色的

                    (2)根节点是黑色的

                    (3)叶子节点(指空节点)是黑色的

                    (4)每个红色节点的子节点都是黑色的

                    (5)任何一个节点到其每一个叶子节点的所有路径上黑色的节点数相同

红黑树的特点:查询速度快,趋近于平衡树,查询叶子节点最大次数和最小次数不能超过2倍。