美文网首页
栈(stack)

栈(stack)

作者: 桑鱼nicoo | 来源:发表于2020-02-27 19:01 被阅读0次

    栈是一个先入后出的有序列表,栈中的元素插入和删除只能在线性表的同一端进行。允许插入和删除的一端,为变化的一端,称为栈顶(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]);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:栈(stack)

          本文链接:https://www.haomeiwen.com/subject/mcwxfhtx.html