【算法导论学习-18】queue的数组实现

来源:互联网 发布:java开发接私活 编辑:程序博客网 时间:2024/05/16 19:09

参考:http://zengzhaoshuai.iteye.com/blog/1171716

这里指的是循环队列。

先写一个接口:

/**   * 创建时间:2014年8月23日 下午5:28:15   * 项目名称:Test   * @author Cao Yanfeng   * @since JDK 1.6.0_21   * 类说明:  queue的接口 */public interface QueueIntereface<T> {/*入队*/void enqueue(T element);/*出队*/T dequeue();boolean isEmpty(); boolean isFull();  }
以数组为内核写一个顺序存储的循环队列,注意,这里循环队列的队空与队满的判断条件:

队空:head==tail&&Q.tail==null

队满:head==tail&&Q.head!=null

传统的判断方法是用两种方式:

1):设置计数器head==tail&&counter==Q.length,表明队满,否则head==tail&&counter<Q.length队为空;

2):少用一个空间,队空时, front=rear; 队满时,(rear+1)%Q.length=front

/**   * 创建时间:2014年8月23日 下午5:32:31   * 项目名称:Test   * @author Cao Yanfeng   * @since JDK 1.6.0_21   * 类说明:  循环队列,以数组为内核的顺序存储 */public class MyQueue<T> implements QueueIntereface<T> {private static int DEFAULT_SIZE = 4; private int capacity;private Object[] elementData;  private int head;      private int tail;     public MyQueue() {// TODO Auto-generated constructor stubhead=tail=0;capacity=DEFAULT_SIZE;elementData=new Object[capacity];  }public MyQueue(int capacity) {// TODO Auto-generated constructor stubhead=tail=0;this.capacity=capacity;elementData=new Object[capacity];  }@Overridepublic void enqueue(T element) {// TODO Auto-generated method stubif (isFull()) {throw new IndexOutOfBoundsException("队列已满的异常");  }elementData[tail++]=element;tail=tail==capacity?0:tail;}@Overridepublic T dequeue() {// TODO Auto-generated method stubif (isEmpty()) { throw new IndexOutOfBoundsException("空队列异常"); }@SuppressWarnings("unchecked")T oldElement=(T)elementData[head];elementData[head++]=null;head=head==capacity?0:head;return oldElement;}@Overridepublic boolean isEmpty() {// TODO Auto-generated method stubreturn head==tail&&elementData[tail]==null;}@Overridepublic boolean isFull() {// TODO Auto-generated method stubreturn head==tail&&elementData[head]!=null;}  }




0 0
原创粉丝点击