算法之路_17、用数组结构实现大小固定的队列和栈

题目:用数组结构实现大小固定的队列和栈

一、数组实现栈结构:

        栈结构是先进后出的,只需要一个数组和一个记录位置的变量size,当进来一个元素,size就++,出去一个元素size就--

public class ArrayStack{
        private Integer[] arr;
        private Integer   size;

        /**
         *  栈初始化
         * @param initSize 初始化数组容量
         */
        public ArrayStack(int initSize){
            if (initSize<0)
                throw  new  IllegalArgumentException("参数不合理!");
            arr=new Integer[initSize];
            size=0;
        }

        /**
         * @Description: 返回栈顶元素
         * @return:  栈空 返回null 栈不空 返回栈顶元素
         * @date: 2019/4/23 10:12
         */
        public Integer peek(){
            if (size==0)
                return null;
            Integer num = arr[size - 1];
            return num;
        }

        /**
         * @Description: 压栈操作
         * @param:    待压入元素
         * @date: 2019/4/23 10:15
         * @throws:  栈满时,抛出数组越界异常
         */
        public void push(int obj){
            if (size==arr.length)
                throw new ArrayIndexOutOfBoundsException("栈满,无法压入!");
            arr[size++]=obj;
        }

        /**
         * @Description: 弹栈操作
         * @return:  返回栈顶元素 并数量减一
         * @date: 2019/4/23 10:19
         * @throws :  栈空时抛出数组越界异常
         */
        public Integer pop(){
            if (size==0)
                throw new ArrayIndexOutOfBoundsException("栈空,无法弹栈!");
            return arr[--size];
        }
    }

二、.实现队列结构:相对栈结构麻烦一些,队列要求先进先出,本案例中设置一个数组和三个变量,size用于记录元素总数,last记录刚进来的元素应该放在哪个位置即队尾,first表示用户要求弹出的元素所在的位置即队首。或许有些同学会觉得size是多余的,完全可以不要。但是size的作用并不仅仅是记录总数,它还有一个作用是使得last与first解耦,避免在一些代码中的一些麻烦。

public class Code_01_Array_To_Stack_Queue {

    public static class ArrayStack{
        private Integer[] arr;
        private Integer   size;

        /**
         *  栈初始化
         * @param initSize 初始化数组容量
         */
        public ArrayStack(int initSize){
            if (initSize<0)
                throw  new  IllegalArgumentException("参数不合理!");
            arr=new Integer[initSize];
            size=0;
        }

        /**
         * @Description: 返回栈顶元素
         * @return:  栈空 返回null 栈不空 返回栈顶元素
         * @date: 2019/4/23 10:12
         */
        public Integer peek(){
            if (size==0)
                return null;
            Integer num = arr[size - 1];
            return num;
        }

        /**
         * @Description: 压栈操作
         * @param:    待压入元素
         * @date: 2019/4/23 10:15
         * @throws:  栈满时,抛出数组越界异常
         */
        public void push(int obj){
            if (size==arr.length)
                throw new ArrayIndexOutOfBoundsException("栈满,无法压入!");
            arr[size++]=obj;
        }

        /**
         * @Description: 弹栈操作
         * @return:  返回栈顶元素 并数量减一
         * @date: 2019/4/23 10:19
         * @throws :  栈空时抛出数组越界异常
         */
        public Integer pop(){
            if (size==0)
                throw new ArrayIndexOutOfBoundsException("栈空,无法弹栈!");
            return arr[--size];
        }
    }

    public static class ArrayQueue{
        private Integer[] arr;
        private Integer size;
        private Integer first;
        private Integer last;

        public ArrayQueue(int arrSize){
            if (arrSize==0)
                throw new IllegalArgumentException("参数非法!");
            arr = new Integer[arrSize];
            size=0;
            first=last=0;
        }
        /**
         * @Description: 返回队首元素
        */
        public Integer peek(){
            if (size==0)
                return null;
            return arr[first];
        }

        public void push(int obj){
            if (size==arr.length)
                throw new ArrayIndexOutOfBoundsException("队满!");
            size++;
            arr[last]=obj;
            last= last==arr.length-1 ? 0 : last+1;
        }

        public Integer poll(){
            if (size==0)
                throw  new ArrayIndexOutOfBoundsException("队空!");
            size--;
            int temp=first;
            first = first == arr.length-1 ? 0 : first+1;
            return  arr[temp];
        }

    }
发布了56 篇原创文章 · 获赞 42 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/SIMPLE1995/article/details/89486573