怎么向零基础的同学讲解栈?

我们不妨来讲个故事。
现在有一条一人宽的巷子,如图所示,每次可以进去一个人,但是只能从最外面的人依次出来。我们用“最里面”和“最外面的人”来表示位置。
在这里插入图片描述
上图中最后一个人“小朋友”出来了以后。变成如下所示。
在这里插入图片描述
那我又再进来一个“小龙”呢?
在这里插入图片描述
当所有人都出来了以后呢?
在这里插入图片描述
因为我们每出来一个人,将“最外面的人”的位置往左移一个,所以没人的时候,“最外面的人”的位置就在“最里面”的左边。
然后为了方便,我们总是让“最里面”来表示最里面可以站人的位置,让这个位置不动(上图中“最里面”的位置是没有人的)。

好了,现在我们用伪代码来解释一下,我们把“最外面的人”用“top”代替,“最里面”用bottom来代替,用数轴上的值来表示位置,buttom位置为0。
创建空栈

top == -1

在这里插入图片描述
上图中 buttom 位置的框内是没有数据的。

数据进栈,因为空间是有大小的,我们不妨设置该栈的大小为 maxsize,那么其实栈存满的时候,top是等于maxsize - 1 的,所以我们先判断到底有没有存满:

if(top != maxsize-1){
top++//我们需要先让这个位置移动,然后再给这个位置的数据赋值
data[top] = 数据1}

在这里插入图片描述

栈满的时候,比如我们规定大小maxsize 为 5,那么当 top == maxsize -1 也就是4 的时候,栈就满了:
在这里插入图片描述
出栈,在上图基础上,让数据5出栈,但是如果栈本来就是空的,我们就没办法再出栈了,所以先判空:

if(top !=-1){
x = data[top];//用一个值来接收当前数据,然后再将top位置左移
top--;
}

在这里插入图片描述
注:以上都是栈的基础操作,平时使用时,一般都用指针,本文为了简单易懂,没有用指针讲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值