常见的数据结构
堆栈、队列、数组、链表和红黑树等,因为数据结构很重要内容涉及很多,所以这里只做简单介绍
1、栈(堆栈)
栈:stack,又称堆栈,他是运算受限的线性表,其限制是仅允许在标的一段进行插入和删除操作,不允许在其他任何位置进行添加、查找和删除等操作
(1)栈(堆栈)的特点
① 先进后出:存进去的元素,要在后面的元素依次取出后,才能取出该元素。就像子弹压进弹夹,当开枪的时候永远都是后压进弹夹的的子弹先射出来。
② 栈的入口出口都是栈的顶端位置
(2)画图说明
2、队列
队列:queue,简称队列,它同堆栈一样也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的列一段进行删除
(1)队列的特点
① 先进先出:存进去的元素,要在它前面的元素依次取出后,才能取出该元素。就像火车过山洞,车头先进去,车尾后进去,但是出山洞的时候车头先出来,车尾后出来。
② 入口、出口各占一侧
(2)画图说明
3、数组
数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间放元素。就像是一排出租屋,有一百个房间,从001到100每个房间都有固定编号,通过编号就可以快速找到租房子的人
(1)数组的特点
① 查找元素快:通过索引,可以快速访问指定位置的元素
② 增删元素慢:因为数组的长度是固定不变的,所以指定索引位置增加元素需要创建一个新的数组,将指定新元素存储在指定索引位置,再把原数组根据索引,复制到新数组的对应索引位置
4、链表
链表:linked list,有一系列的结点node(链表中每个元素称为结点)组成,结点可以在运行时动态生成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个时存储下一个结点地址的指针域。我们常说的链表结构有单向链表和双向链表两种
(1)链表的特点
① 多个结点之间,通过地址进行连接。就像多个人受打手,每个人使用自己的右手拉往下一个人的左手,依次类推,这样多个人就连在一起了
② 查找元素慢:想查找某个元素,需要通过连接的结点,依次向后查找指定元素
③ 增删元素快:链表中增加删除元素对链表的整体结构没有影响,所以快
(2)画图说明
5、红黑树
(1)树结构是什么样的?
一种像树一样的结构
(2)什么是二叉树
二叉树:binary tree,是每个结点不超过2的有序树(tree)
简单理解,就是一种类似于我们生活中树的结构,只不过每个结点上都最多只能有两个子结点。
二叉树是每个结点最多有两个树的数结构。顶上的叫根节点,两边被称作“左子树”和“右子树”
(3)什么是排序树(查找树)?
在二叉树的基础上,元素是有大小顺序的,左子树小,右子树大
(4)什么是平衡树、不平衡树
平衡树是左边子树的子元素等于右边子树的子元素个数,反之不相等即为不平衡树
(5)什么是红黑树?
红黑树是一种特殊的二叉查询树,他的查询速度非常快,查询子叶子结点最大次数和最小次数不能超过2倍
约束
① 结点可以是红色的或者是黑色的
② 根结点是黑色的
③ 叶子结点(空结点没有子元素的结点)是黑色的
④ 每个红色的结点的子结点都是黑色的
⑤ 任何一个结点到其每一个叶子结点的所有路径上黑色结点数相同