栈(stack)

2020-03-17 18:11:41 浏览数 (1)

栈是一个先入后出的有序列表,栈中的元素插入和删除只能在线性表的同一端进行。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底。所以最后放入的元素总是在栈顶,最后放入的元素也总是被最先删除

代码语言:javascript复制
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]);
        }
    }
}

0 人点赞