这里主要了解java中和集合相关的数据结构,只是简单了解一下这些常见的数据结构,不作过于深入的学习。
数据存储常用的结构有:栈、队列、数组、链表和红黑树。
栈
栈:也称堆栈,只允许在同一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。
栈的特点:(1)先进后出
(2)栈的入口、出口都是栈顶
压栈:存元素,即把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。
弹栈:取元素,即把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。
队列
队列:简称队,只允许在表的一端进行插入,而在表的另一端进行删除。
队列的特点:(1)先进先出(就像火车过隧道一样)
(2)队列的入口、出口各占一侧
数组
数组:是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。
数组的特点:
(1)查询快
数组的地址是连续的,通过数组的首地址可以找到数组,通过数组的索引可以快速查找某一个元素
(2)增删慢
数组的长度是固定的,想要增加或者删除一个元素必须要创建一个新数组,把原数组的数据复制过来
链表
链表:是由一系列节点node组成,一个节点包含了一个数据域(存储数据)和两个指针域(存储地址)。
链表分为:单向链表 、双向链表
(1)单向链表:链表中只有一条链,不能保证元素的顺序(存储元素和取出元素的顺序有可能不一致)
(2)双向链表:链表中有两条链,有一条链是专门记录元素的顺序,是一个有序的集合
链表的特点:(1)查询慢
因为链表中的地址不是连续的,每次查询元素都必须从头开始查询
(2)增删快
因为链表结构增加或者删除一个元素对链表的整体结构没有影响,所以增删快
增加元素:只需要修改连接下个元素的地址即可
删除元素:只需要修改连接下个元素的地址即可
红黑树
二叉树:每个节点上最多只能有两个子节点的有序树,顶上的叫根节点,两边被称为“ 左子树 ” 和 “ 右子树 ”
这里说的红黑树是一种特殊的二叉树,它本身就是一颗二叉查找树,将节点插入后,该树仍然是一颗二叉查找树。
红黑树的约束:
(1)节点可以是红色或者黑色的
(2)根节点是黑色的
(3)叶子节点(指空节点)是黑色的
(4)每个红色节点的子节点都是黑色的
(5)任何一个节点到其每一个叶子节点的所有路径上黑色的节点数相同
红黑树的特点:查询速度快,趋近于平衡树,查询叶子节点最大次数和最小次数不能超过2倍。