java创建队列及相关操作

前段时间看各位博主写的java队列程序,在这里给出自己的解决方法,望借鉴。

//实现队列自定义,         还有点问题

/*对于队列来说,rear一直指向队尾要加入的一个元素,而不是已有的元素,所以在入队列时候,是先
 data[rear]=obj,然后再rear++,指向下一个空位置;
 front则指向队列首元素,故在出队列时候,也是先obj=data[front],然后front++;
 size为队列的长度;
 MaxSize为队列所用数组的长度;
 取首元素等操作时候用到data[(front+1)%data.length],front+1为正常data的下标,因为使用循环数组,故取余;
 详见http://wenku.baidu.com/view/d69287a9d1f34693daef3e7a.html
 */

public class myQueue {

    /**
     * @param args
     */

    private int front;
    private int rear;
    private int size;
    private Object[] data;

    public myQueue(int MaxSize) {
        front = rear = 0;
        data = new Object[MaxSize];
    }

    public int getSize() {
        return size;
    }

    // 入队列,如果数组长度不够,就长度翻倍,先加元素再rear++,rear开始时候指向队尾的下一个元素位置
    public void enter(Object o) {
        if (size >= data.length) {
            Object[] newdata = new Object[data.length * 2];
            for (int i = 0; i < data.length; i++) {
                newdata[i] = data[i];
            }
            data = newdata;
        }
        data[rear] = o;
        rear++;
        size++;
    }

    // 出队列,用front时候,要除以数组长度取余
    public Object leave() throws Exception {
        Object o = null;
        if (size > 0) {
            o = data[front];
            front = (front + 1) % data.length;
            size--;
            return o;
        }
        throw new Exception("队列为空");
    }

    public Object peek() {
        if (size <= 0) {
            System.out.println("队列为空");
        }
        return data[(front) % data.length];
    }

    // rear=front则为空
    public boolean isEmpty() {
        return rear == front;
    }

    public void clear() {
        front = rear = 0;
    }

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        myQueue mq = new myQueue(10);
        for (int i = 0; i < 10; i++) {
            mq.enter(i);
        }
        while (!mq.isEmpty()) {
            System.out.println(mq.leave());
        }
    }

}

 

posted on 2013-10-05 16:58  tianyuanshgan  阅读(2198)  评论(0编辑  收藏  举报

导航