持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情。
双端栈
在上一篇中,我们设计了基于顺序表的栈的入栈push()
方法和出栈pop()
方法。而在本篇开始,我们将为大家介绍特殊的栈——双端栈。
因为顺序表的特殊性,当我们创建了一个基于顺序表实现的栈时,系统都会在内存中开辟出给这个栈专属的空间。而我们在使用时,栈不会时时刻刻都处于满的状态,甚至可能这个数组空间从创建到销毁,末位的几个空间位置都没有被使用过。为了将这些空间利用起来,双端栈应运而生。
双端栈与普通的栈最大的区别就在于,双端栈具有两个栈底指针和两个栈顶指针 。也就是说,实际上双端栈实际上是两个栈。当栈入栈时,一个栈顶指针从下往上移动入栈元素,另一个栈顶指针从上往下入栈元素;出栈时,一个栈顶指针从上往下移动出栈元素,另一个栈顶指针从下往上移动出栈元素。
也就是说,双端栈实际上是由两个栈共享一个数组的内存空间。
public class doubleStack{
int top1,bottom1;
int top2,bottom2;
int[] arr;
public doubleStack(int length){
this.arr = new int[length];
this.top1 = -1;
this.bottom = 0;
this.top2 = length;
this.bottom = length-1;
}
}
这样就创建好了双端栈的初始化方法,我们将两个栈底指针分别设为数组的两端。在下一篇中,我们将设计双端栈的入栈、出栈方法,并为大家设计双端栈判断栈满的方法。
小结
本篇中我们为大家介绍和设计了双端栈的初始化方法。
天天学习,加速成长!
希望与各位一起变得越来越强!