数组队列

用数组实现的队列,也叫循环队列。就是定义一个数组,用两个下标head,tail表示队头和队尾。当队头和队尾相等时,队列为空。当队尾+1等于队头时,队列为满。

注意tail的值,当插入一个元素时tail=1 szie=1,两个时tail=2 size=2,三个时tail=0 size=3,四个时报错“is full”

package Algorithm;

public class QueueByArray {
    private Object[] queue;
    final static int DEFAULT_MAX_SIZE = 100;
    int length, head, tail;

    private void init() {
        queue = new Object[length];
        head = tail = 0;
    }

    QueueByArray() {
        length = DEFAULT_MAX_SIZE;
        init();
    }

    QueueByArray(int size) {
        length = size;
        init();
    }

    public boolean isFull() {
        return size() == length;

    }

    public boolean isEmpty() {
        return size() == 0;
    }

    public int size() {
        if (queue[tail] != null && tail == head) {
            return length;
        }

        return (tail - head + length) % length;
    }

    public void clear() {
        queue = null;
        queue = new Object[length];
    }

    // in queue
    public void put(Object o) throws Exception {
        if (isFull()) {
            System.out.println(head);
            System.out.println(tail);
            throw new Exception("the queue is full!");
        } else {
            queue[tail] = o;
            tail = (tail + 1) % length;
        }
    }

    // out queue
    public Object get() throws Exception {
        if (isEmpty()) {
            throw new Exception("the queue is empty!");
        } else {
            final Object o = queue[head];
            queue[head] = null;
            head = (head + 1) % length;
            return o;
        }
    }

    public static void main(String[] args) throws Exception {
        final QueueByArray myqueue = new QueueByArray(3);

        for (int i = 111; i < 114; i++) {
            myqueue.put(i);
        }
        System.out.println("head==" + myqueue.head + ";tail==" + myqueue.tail + ";size=="
                + myqueue.size());

        while (myqueue.size() > 0) {
            System.out.println(myqueue.get());
        }

    }

}

 


输出:

head==0;tail==0;size==3
111
112
113

 

posted on 2019-01-23 10:46  pu20065226  阅读(222)  评论(0编辑  收藏  举报