美文网首页算法
用数组结构实现大小固定的栈和队列

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

作者: 一凡呀 | 来源:发表于2017-11-23 20:23 被阅读0次

    题目1:

    用数组结构实现大小固定的栈

    思路:

    栈:栈是后进先出的,所以定义一个变量size用来记数组下标,入栈就是向数组中加数据,获取栈顶就是获取arr[size-1],出栈就是出arr[--size],在这里要注意代码里的size,在向栈中加数的时候执行的操作是arr[size++] = num
    因为加入后size++,所以在执行完依次添加操作后,size当前数值上数组的值为空,还没有加,比如数组为空,你加了一个数,size也就是数组下标变成了1,但是1位置没数,只有0位置有数,所以后面求Pop时是arr[--size],peek同理

    代码:

    public static class ArrayStack {
            private Integer[] arr;
            private Integer size;
    
            public ArrayStack(int initSize) {
                if (initSize < 0) {
                    throw new IllegalArgumentException("The init size is less than 0");
                }
                arr = new Integer[initSize];
                size = 0;
            }
    
            public Integer peek() {
                if (size == 0) {
                    return null;
                }
                return arr[size - 1];
            }
    
            public void push(int obj) {
                if (size == arr.length) {
                    throw new ArrayIndexOutOfBoundsException("The queue is full");
                }
                arr[size++] = obj;
            }
    
            public Integer pop() {
                if (size == 0) {
                    throw new ArrayIndexOutOfBoundsException("The queue is empty");
                }
                return arr[--size];
            }
        }
    

    题目2:

    用数组结构实现大小固定的队列:

    思路:

    队列:队列是先进先出,初始化三个帮助变量,first,last,size,first的作用是每出队列一个值first就+1,size就减一;end的作用是没进队列一个数就+1,size就加一,只要size大于零就说明first没有追上end,说明队列还可以加元素。注意last和first值的每次更新,如果到达了arr.length-1的长度,就让他等于0,相当于循环了依次,否则就+1;

    代码:

        public ArrayQueue(int initSize) {
                if (initSize < 0) {
                    throw new IllegalArgumentException("The init size is less than 0");
                }
                arr = new Integer[initSize];
                size = 0;
                first = 0;
                last = 0;
            }
    
            public Integer peek() {
                if (size == 0) {
                    return null;
                }
                return arr[first];
            }
    
            public void push(int obj) {
                if (size == arr.length) {
                    throw new ArrayIndexOutOfBoundsException("The queue is full");
                }
                size++;
                arr[last] = obj;
                last = last == arr.length - 1 ? 0 : last + 1;
            }
    
            public Integer poll() {
                if (size == 0) {
                    throw new ArrayIndexOutOfBoundsException("The queue is empty");
                }
                size--;
                int tmp = first;
                first = first == arr.length - 1 ? 0 : first + 1;
                return arr[tmp];
            }
        }
    

    相关文章

      网友评论

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

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