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

题目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];
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 栈 栈的英文单词是Stack,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入,...
    Jack921阅读 1,630评论 0 5
  • 1.栈 1.1.栈的定义 栈(stack)是限定仅在表尾(栈顶 top)进行插入和删除操作的后进先出的线性表。 p...
    JonyFang阅读 1,595评论 0 21
  • 本文内容:一、栈1、什么是栈?2、栈的操作集.3、栈的 C 实现.二、队列1、什么是队列?2、队列的操作集.3、队...
    半纸渊阅读 2,138评论 0 4
  • 他手拄拐棍 一步二步缓缓地挪动小方步 慢慢地向前移动 他是一位高龄老人 但他勤劳一生 从不虚度年华 他心系儿女子孙...
    浅若灿阳阅读 179评论 0 3
  • 其实,岁月静好,现世安稳,特别美,特别好。 只是,有一些孩子,天生不安分,就是喜欢折腾,唯恐余生不乱。 写完这一句...
    只欢喜自渡阅读 485评论 4 2

友情链接更多精彩内容