C语言对于栈和队列的一些理解

最简单的理解最极致的享受

1.先看栈,我是这样理解的,把他看成是一个瓶子(只是在脑子想象的瓶子)而且数据进出都只有唯一的一个口子,如下图在这里插入图片描述看的出来,从口子进去那么a第一个进去但是被压在最后一个位置,所以你要把他拿出来的时候只能最后一个拿出来因此就可以明白栈的操作了。

在这里插入图片描述这时候我们发现有一个top,你可以理解为一个标示符号,当你设置栈位空的时候他是为-1的 (因为数组的第一个下标为0),因为我把栈看成了一个数组了,第一个元素a[0]是a,所以当top在-1时,就可以理解为栈是空栈了(注意:我所说的空,并不意味这top = -1时栈中没有了数据,而是此时你可以默认为栈中为空,这样你就可以控制top的指向位置来给栈中的数据赋值来取代原先的数据了,因为栈是用来放入数据的东西,而top只是为了方便我们定位的工具)

2.了解清楚之后就可以对栈进行操作了

入栈(要先判断栈是否为满,栈满的条件是top指向数组的最后一个下标元素)
出栈(判断栈是否为空,top = -1)
取栈顶(找到top这个位置)
初始化栈(栈中元素全部清0)

具体代码:自行查找,重在理解!!!

队列

对于队列我本来想自己写的但是我找到了一篇更好的理解博客因此直接转载了

添加链接描述

队列有头尾意思就是一端进一端出,因此要定义2个表示位

在这里插入图片描述rear尾巴
front头

尾巴进,头出去,当初始化队列时全部置位-1都在一端
在这里插入图片描述这种队列有缺陷具体的缺点看一下我上面的链接

这里说一下循环队列算法吧,具体循环解析:

在这里插入图片描述
看到此时数组有8个元素,a[0]-----a[7]
但是当我们进队到a[7]时是不是在想在进队那么就会是a[8]但是没有a[8]那么我们怎么办呢?
很简单只需要一个算法:

队头指针进1: rear = (rear+1) % 8:取余,rear为7时,套用这个公式得到rear = 0,就可以继续使用a[0]了

队头指针进1: front = (front+1) % 8

队空条件:front == rear

队满条件:(rear+1) % 8 == front

队列初始化:front = rear = 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值