栈和队列介绍

栈和队列是两种重要的线性结构,从数据结构来看,他们也是线性表,其特殊性在于它们的基本操作是线性表的子集,也就中功能受限的线性表,也被称为限定性的数据结构。

但从数据类型角度来看,它们是和线性表不大相同,有些时候它们被当作一种管理数据的规则。

栈结构

1、栈结构介绍

栈(stack) 是限定仅在表尾进行插入或删除操作和线性表(只有一端口能进出数据),对栈来说表尾和表头有特殊含义,表尾被称为栈顶,表头被称为栈底,没有元素的空表称为空栈,元素数量达到栈的容量称为满栈,数据添加到栈中叫入栈、压栈,数据从栈中删除叫出栈、弹栈,由于栈元素特殊添加和删除的规则,所以栈的元素会先进后出的现象,简称为LIFO(Last in first out)。后进先出(FILO);

2、栈结构所具备的功能

1、创建栈

2、销毁栈

3、栈是否为空

4、栈是否为满

5、入栈

6、出栈

8、查看栈顶元素

9、栈元素数量

注:只有顺序栈结构才有需要判断栈是否满。

栈的应用

1、内存管理,比如栈内存,它所以叫栈内存就是因为它遵循着栈的后进先出的规则,它支持着函数调用,函数在传参数就是把参数先压入到栈内存,等跳转过去后再把参数从栈内存弹出。

2、特殊的算法,例如:进制转换、表达式解析、迷宫求解。

队列

1、队列介绍

它与栈刚好相反,是一种先进先出的线性表,它有两个端口添加、删除元素,一个端口只能添加元素,被称为入队,该端口被为队尾,另一个端口只能删除,被称为出队,该端口被称为队头。

2、队列结构所具备的功能

1、创建队列

2、销毁队列

3、队列是否为空

4、队列是否为满

5、入队

6、出队

8、查看队头元素

9、查看队尾元素

10、队列元素数量

注:只有顺序栈结构才有需要判断队列是否满。

顺序队列的表示与实现

顺序栈的栈顶下标会随着元素入栈增大,元素出栈减小,从而让空间重复使用,而顺序队列的队头指针和队尾指针,会随着元素的入队出队一直增加,无法重复使用,而形成一次性的数据结构。

为了避免这种情况,当队头下标的队尾下标到达存储空间的末尾时,要想办法把队头下标的队尾下标"回头",就是把顺序队列的存储空间当作一个"环形",循环使用,所以顺序队列也叫循环队列。

带计数器版本的循环队列:

1、解决了计算元素数量的问题

2、解决了判断队列空、满状态的问题

3、缺点就是增加了一个成员,在创建、入队、出队时都要操作它。

如何判断队列空、状态?

把队头下标初始化为front=0,队尾下标也初始化rear=0,队列空时的判断条件是front == rear,但随机队列的使用,队列满时的判断也是front == rear。

解决方法就是把队列的最后一个位置空置不使用,这样队列满的状态front == (rear+1)%cap;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxj555281

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值