栈定义
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈的示意图:
入栈
向栈中添加元素,此过程被称为"进栈" 。top指针初始值为-1,始终指向栈顶元素。
出栈
从栈中提取出指定元素,此过程被称为"出栈"
代码实现(数组)
1.创建模拟的类ArrayStack
初始化相应的成员变量。maxSize为栈能加入元素的最大个数,top初始值为-1(空栈时)。
class ArrayStack {
private int maxSize;
private int[] stack;
private int top = -1;
//重写构造函数,传入maxsize的值,并创建数组。
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
stack = new int[maxSize];
}
}
2.判满
top始终指向栈顶,所以当top等于maxsize-1时,栈就是满的。
public boolean isFull(){
return top == maxSize-1;
}
3.判空
top为-1时,该栈为空。
public boolean isEmpty(){
return top == -1;
}
4.入栈push
先判断是否栈满。没满的话,先将top指针向上移动后,把数据加入top指向的位置即可。
public void push(int value){
if (isFull()){
System.out.println("栈已经满了。。。");
return;
}
top++;
stack[top] = value;
}
5.出栈pop
与入栈相反,要出栈的数据就是此时top指向的数据。只需将它返回,再把top指针向下移动即可。
public int pop(){
if (isEmpty()){
throw new RuntimeException("栈为空。。。");
}
int value = stack[top];
top--;
return value;
}
6.显示栈
栈的显示是后加入的在前面显示,只需要一个逆循环就可以遍历出来。
public void list(){
if (isEmpty()){
System.out.println("栈为空。。。");
return;
}
for (int i=top;i>=0 ;i--){
System.out.println(stack[i]);
}
}