持续创作,加速成长!这是我参与「掘金日新计划 · 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()
。
天天学习,加速成长!
希望与各位一起变得越来越强!