队列(顺序存储) java实现

来源:互联网 发布:数控转塔冲床编程视频 编辑:程序博客网 时间:2024/04/29 13:35

http://blog.csdn.net/wuwenxiang91322/article/details/12259099

package com.struct.CirQueue;/** * 循环队列 * @author WWX */public class CirQueue<E> {    //对象数组,队列最多存储a.length-1个对象    E[] a;    //默认初始化大小    private static final int DEFAULT_SIZE=10;    //对首下标    int front;    //队尾下标    int rear;    public CirQueue(){        this(DEFAULT_SIZE);    }    /**     * 初始化指定长度的队列     * @param size     */    @SuppressWarnings("unchecked")    public CirQueue(int size){        a=(E[])(new Object[size]);        front=0;        rear=0;    }    /**     * 将一个对象追加到队列尾部     * @param obj     * @return 队列满时返回false,否则返回true     * @author WWX     */    public boolean enqueue(E obj){        if((rear+1)%a.length==front){            return false;        }else{            a[rear]=obj;            rear=(rear+1)%a.length;            return true;        }    }    /**     * 队列头部出队     * @return     * @author WWX     */    public E dequeue(){        if(rear==front)            return null;        else{            E obj =a[front];            front=(front+1)%a.length;            return obj;        }    }    /**     * 队列长度     * @return     * @author WWX     */    public  int size(){        return (rear-front)&(a.length-1);    }    //队列长度(另一种方法)    public int length(){        if(rear>front){            return rear-front;        }else            return a.length-1;    }    /**     * 判断是否为空      * @return     * @author WWX     */    public boolean isEmpty(){        return rear==front;    }    public static void main(String[] args) {        CirQueue<String> queue=new CirQueue<String>(4);        queue.enqueue("1");        queue.enqueue("2");        queue.enqueue("3");        System.out.println("size="+queue.size());        int size=queue.size();        System.out.println("*******出栈操作*******");        for(int i=0; i<size;i++){            System.out.print(queue.dequeue()+" ");        }    }}
0 0