数据结构13:栈(02)

67 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

基于顺序表的栈实现

在上一篇中,我们设计了基于顺序表的栈的初始化方法。本篇则继续为大家设计的入栈push()方法和出栈pop()方法。

在上篇讲解的性质时提到,栈只允许在一端进行插入或删除操作。所以我们的入栈push()方法和出栈pop()方法都只需要操作栈的栈顶指针top就可以满足栈的定义。

在栈中,若是向一个已经满了的栈入栈元素就会导致栈溢出,这种情况造成的溢出被称之为上溢;而若是从一个空栈出栈元素同样会造成栈溢出,这种溢出称之为下溢

首先是入栈方法push()

public void push(int value)
{
    if(++this.top >= this.arr.length)
    {
        this.top--;
        System.out.println("这个栈满了哦~");
        return;
    }
    this.arr[this.top] = value;
}

在入栈方法中,我们需要先移动栈顶指针top,判断本次添加是否会造成栈溢出。只有在确认了栈种仍有空余位置后,我们才能对栈进行入栈操作。

然后我们设计出栈方法pop()

public int pop()
{
    if(this.top < this.bottom)
    {
        System.out.println("从空栈里是取不出东西的~");
        return null;
    }
    return this.arr[this.top--];
}

push()入栈方法相反,出栈方法pop()则是要取出当前栈顶指针top所指向的栈空间中的元素。所以我们要先判断此时是否是空栈,在我们的设置中,当栈顶指针top-1(在数组中下标0的位置可以存储元素)时就表示栈空了。

现在我们就已经设计好了一个有着基本功能的栈,在下一篇中我们将为大家介绍一种特殊的栈结构——双端栈

小结

本篇中我们设计了栈的基本功能:入栈push()和出栈pop()

天天学习,加速成长!

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