栈是一种先进后出(FILO)的有序列表,插入和删除元素只能在线性表的同一端进行操作,允许插入和删除的一端叫做栈顶(Top),另一端为固定的栈底(Bottom)
用数组来模拟栈
private int maxSize; //栈的大小
private int[] stack; //数组,数组模拟栈,数据放在该数组
private int top = -1; //表示栈顶,初始化-1
//初始化栈
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
stack = new int[maxSize];
}
判断栈是否为空
判断栈为空的操作就是判断栈顶是否为-1(前面初始化的栈顶就是为-1)
//栈空
public boolean isEmpty(){
return top == -1;
}
判断栈是否满
判断栈是否满就是比较栈顶和栈最大容量的关系
//栈满
public boolean isFull(){
return top == maxSize - 1;
}
入栈
入栈就是栈底不动,将元素压入栈中,栈顶向上移
//入栈
public void push(int value){
if(isFull()){
System.out.println("栈满,入栈失败");
return;
}
top++;
stack[top] = value;
}
出栈
//出栈,返回栈顶的数据
public int pop(){
if(isEmpty()){
throw new RuntimeException("栈空,没有数据");
}
return stack[top--];
}
遍历
栈的遍历是从栈顶开始向栈底进行遍历的
//遍历栈,从栈顶开始显示数据
public void list(){
if(isEmpty()){
System.out.println("栈空,没有数据");
return;
}
for(int i = top; i >= 0; i--){
System.out.printf("stack[%d] = %d\n", i, stack[i]);
}
}