数据结构14:栈(03)

55 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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;
    }
}

这样就创建好了双端栈的初始化方法,我们将两个栈底指针分别设为数组的两端。在下一篇中,我们将设计双端栈的入栈、出栈方法,并为大家设计双端栈判断栈满的方法。

小结

本篇中我们为大家介绍和设计了双端栈的初始化方法。

天天学习,加速成长!

希望与各位一起变得越来越强!