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

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

作者: 一凡呀 | 来源:发表于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];
        }
    }

相关文章

  • 栈和队列

    一、定义 栈:先进后出 队列:先进先出 二、题目 1.用数组结构实现大小固定的栈和队列 2.返回栈中最小元素 题意...

  • 栈、队列、矩阵、链表问题(一)

    目录 用数组结构实现大小固定的队列和栈 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作...

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

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

    题目1: 用数组结构实现大小固定的栈 思路: 栈:栈是后进先出的,所以定义一个变量size用来记数组下标,入栈就是...

  • 实现链表_链表实现栈和队列_3

    之前用数组实现栈和队列,虽然有resize操作,但是其实还是静态数组,不是真正的动态。当我们用链表实现栈和队列的时...

  • 用数组实现栈、队列

    用数组实现一个栈 用数组实现一个队列 用单链表实现给队列

  • 数据结构-队列和栈

    队列和栈都是逻辑结构,其物理结构可以用数组和链表表示。只要记住队列和栈数据操作的特殊性,我觉得就能掌握队列和栈了。...

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

  • 数组实现队列之循环队列

    对于链表实现方式,队列的入队、出队操作和栈是大同小异的。但对于数组实现方式来说,因为数组的长度固定,队列的入队和出...

  • ARTS-第三周

    Algorithm 这周实现了最基本的动态数据结构链表,并用数组和链表分别实现了栈和队列。 git代码地址 数组和...

网友评论

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

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