简单的数据结构介绍(栈、队列、数组、链表、红黑树)

本文主要介绍了数据结构的基础知识,包括栈、队列、数组、链表和红黑树的概念及特点。栈具有后进先出(LIFO)的特性,队列则遵循先进先出(FIFO)原则;数组查询速度快,增删慢,而链表增删快但查找慢;红黑树是一种保持近似平衡的二叉查找树,提供快速的查找、插入和删除操作。
摘要由CSDN通过智能技术生成

学习目标:

了解常见的数据结构

学习内容:

栈、队列、数组、链表、红黑树

学习产出:

1. 数据结构

数据结构 : 就是数据用什么样的方式组合在一起

常见的数据结构有: 栈, 队列, 数组, 链表和红黑树. 我们分别来了解一下.
1.1 栈(Stack)

栈 : stack, 又称堆栈, 它是运算受限的线性表, 其限制是仅允许在标的一端进行插入和删除操作, 不允许在其他任何位置进行添加, 查找, 删除等操作.

简单的说, 采用该结构的集合, 对元素的存取有如下特点 :

先进后出(FILO), ( 即存进去的元素, 要在他后面的元素依次取出后, 才能取出该元素). 例如 子弹被压进弹夹, 要先弹出上面的子弹, 然后才能取出下面的子弹栈的入口, 出口都是栈的顶端位置

存入元素顺序 : A B C

取出元素顺序 : C B A

这里两个名词需要注意 :

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

1.2 队列(Queue)

队列 : 即queue, 简称队, 他同堆栈一样, 也是一种运算受限的线性表, 其限制是仅允许在表的一段进行插入, 而在表的另一端进行删除.
简单的说, 采用该结构的集合, 对元素的存取有如下的特点 :
先进先出 (即, 存进去的元素, 要在他前面的元素依次取出后, 才能取出该元素 ) 例如 火车进隧道, 车头先进去, 车尾后进去, 车头先出来, 车尾后出来
队列的入口, 出口各占一侧.

存入元素顺序 : A B C

取出元素顺序 : A B C 案例: 过安检门

1.3 数组(Array)

数组 : Array 是有序的元素序列, 数组是在内存中开辟一段连续的空间, 并在此空间存放元素. 就像是一排出租屋, 有100 个房间, 从001到100每个房间都有固定的编号, 通过编号就可以快速找到租房子的人.

简单的说, 采用该结构的集合, 对元素的存取有如下的特点 :

查找元素快, 通过索引, 可以快速访问指定位置的元素

数组的特点 : 查询快, 增删慢

增删慢的原因:

指定索引位置增加元素, 需要*创建一个新数组,* 将指定新元素存储在指定索引位置, 再把源数组元素根据索引, 复制到新数组对应索引的位置.指定索引位置删除元素, 需要创建一个新数组, 把原数组元素根据索引, 赋值到新数组对应索引位置, 原数组中指定索引位置元素不复制到新数组中.

1.4 链表(LinkedList)

链表 : linked list , 由一系列结点 node (链表中每一个元素称为结点) 组成, 结点可以在运行时动态生成, 每个结点包括两个部分, 一个是存储数据元素的数据域, 另一个是存储下一个结点地址的指针域, 我们常说的链表结构有单向链表与双向链表. 这里先介绍单向链表

简单的说, 采用该结构的集合, 对元素的存取有如下的特点 :

多个结点之间, 通过地址进行连接, 例如:多个人手拉手, 每个人使用自己的右手拉住下个人的左手, 依次类推, 这样多个人就连在一起了.

链表的特点: 查找元素慢, 增删元素快

原因 :

查找元素慢 : 链表中的地址不是连续的, 每次查询元素都必须从头开始查询, 想要查找某个元素, 需要通过连接的节点, 依次向后查找指定元素.增删元素快 : 链表结构增加/删除一个元素, 对链表的整体结构没有影响, 所以增删快

链表中的每一个元素也称之为一个节点, 一个节点包含了一个数据域( 存储数据 ), 两个指针域( 存储地址 )

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

双向链表 : 链表中有两条链子, 有一条链子是专门记录元素的顺序的.所以它是一个有序的集合

1.5 红黑树

二叉树 : binary tree, 是每个结点不超过2的有序树(tree)

简单理解 : 就是一种类似于我们生活中树的结构, 只不过每个结点上都最多只能有两个子结点, 二叉树是每个结点最多有两个子树的树结构, 顶上的叫根结点, 两边被称作左子树和右子树

我们要说的是二叉树的一种比较有意思的, 叫做红黑树, 红黑树本身就是一棵二叉查找树, 将结点插入后, 该树仍然是一颗二叉查找树.

红黑树可以通过红色节点和黑色节点尽可能的保证二叉树的平衡,从而来提高效率。

红黑树的约束:

节点可以是红色的或者黑色的
根节点是黑色的
叶子节点(特指空节点)是黑色的
每个红色节点的子节点都是黑色的
任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同

红黑树的特点: 速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值