栈是一个先入后出的有序列表,栈中的元素插入和删除只能在线性表的同一端进行。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底。所以最后放入的元素总是在栈顶,最后放入的元素也总是被最先删除
public class ArrayStackDemo {
public static void main(String[] args) {
ArrayStack stack = new ArrayStack(4);
for(int i = 0;i < 5;i++){
stack.push(i);
}
stack.list();
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}
class ArrayStack{
private int maxSize; // 栈的大小
private int[] stack; // 使用数据表示栈
private int top = -1; // 表示栈顶,栈顶是移动的,栈底是不变的
public ArrayStack(int maxSize){
this.maxSize = maxSize;
stack = new int[maxSize]; // 初始化栈的大小(栈是用数组表示的)
}
/**
* 判断栈满
* @return
*/
public boolean isFull(){
return top == maxSize - 1;
}
/**
* 判断栈空
* @return
*/
public boolean isEmpty(){
return top == -1;
}
/**
* 入栈
* @param value
*/
public void push(int value){
if (isFull()){
System.out.println("栈满");
return;
}
top++;
stack[top] = value;
}
/**
* 出栈
* @return
*/
public int pop(){
if(isEmpty()){
throw new RuntimeException("栈空,没有数据~");
}
int value = stack[top];
top--;
return value;
}
/**
* 遍历栈
*/
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]);
}
}
}