01
顺序栈的基本运算:进栈
通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,按照之前的流程,在介绍完一种数据结构之后,我们就要来研究这种数据结构的基本运算操作。本节就 "如何使用顺序表模拟栈以及实现对栈中数据的基本操作(出栈和入栈)" 给大家做详细介绍。
01
图例
在接触进栈、判断栈空这些基本操作的代码之前,我们先来看一个例子。平时大家吃完饭,或许都被父母叫过来洗盘子做家务,通常我们洗盘子,会从没洗的脏盘子堆中拿出一个盘子开始在水池里洗,如图1所示,
图1
而每洗完一个盘子,我们就会把洗好的新盘子放到旁边,如图2,
图2
之后每洗完一个盘子,我们就把新洗好的盘子摆在最上面,直到全部盘子洗完(图3)
图3
我们每次把洗好的新盘子放在最上面这个操作,就好像往栈里面放一个元素,放完盘子洗好的盘子数目增加了,就好像栈中的元素增加了,同时我们也知道了最上面的元素,也就是栈顶现在是多少。
02
代码
结合这个例子,我们来看代码:
03
总结
在代码中我们实现入栈操作使用的是顺序栈,如果你仔细观察顺序表(底层实现是数组)和栈结构就会发现,它们存储数据的方式高度相似,只不过栈对数据的存取过程有特殊的限制,而顺序表没有。
从中我们可以把入栈步骤总结成3步:
1.判栈满:s.top == MaxSize – 1,如果栈顶已经到数组的末尾,则表明数组已经存储满,没法继续存储元素。
2.顶加一:放入一个元素,栈顶指针要往上移一位,也表明顺序栈数组当前的存储位置。
3.进元素:把要存储的的元素放入数组中。
02
顺序栈的基本运算:判断栈空
实际上,根据上节的学习,我们知道我们通常把空栈的判定条件定为栈顶指针top等于-1,所以代码我们很容易就能给出。
01
代码
02
总结
可以说顺序栈的基本运算虽然是一种新的数据结构的运算,但是其实现本质还是设有特殊规则的数组,在记忆代码的过程中,我们只需要把它作为有栈规则的数组去操作,动手画画图,这类代码也就不难解决。
领取专属 10元无门槛券
私享最新 技术干货