Java数组队列ArrayQueue
作者: wangding263 链接:http://wangding263.javaeye.com/blog/255523 发表时间: 2008年10月20日
声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!
队列是一种“FIFO”先进先出的数据结构.可以想象每年在火车站中买票的人群所组成的"队列"。
|队员1 队员2 队员3 队员3 队员4 队员5 队员6 队员7 队员8|
^ ^
想象两个指针 一个指向队头 一个指向队尾,加人到队列中是从队尾入的,出队是从队头出队的。
队列接口:
/** * 队列FIFO的接口 * * @author 鼎鼎 * * @param <E> */ public interface Queue<E> { /** * 入队: 从队尾加入一元素 * * @param target */ public void add(E target); /** * 出队: 移走队头元素 * * @param target * @return 当前队头元素 */ public E remove(); /** * 当前队列中的元素个数 */ public int size(); /** * 判断当前队列是否为空 * * @return */ public boolean isEmpty(); /** * 只是返回队头元素 * @return */ public E front(); }
数组队列的代码实现:
public class ArrayQueue<E> implements Queue<E> { private E[] data; // 当前队列中元素的大小 private int size; private int front; private int rear; public ArrayQueue() { data = (E[]) new Object[20]; size = 0; front = 0; rear = 0; } public void add(E target) { if (isFull()) { enlarge(); //数组队列满后,需要扩充,记住扩充后要将front的值归0 front=0; } rear = (front + size) % data.length; data[rear] = target; size++; } public boolean isEmpty() { return size == 0; } /** * 判断当前队列是否已满 * * @return */ public boolean isFull() { return size == data.length; } /** * 将数组容量扩大两倍 * */ public void enlarge() { E[] newData = (E[]) new Object[data.length * 2]; for (int i = 0; i < data.length; i++) { newData[i] = data[i]; } data = newData; newData = null; } public E remove() { if (isEmpty()) { throw new RuntimeException("队列为空!"); } E tempData = data[front]; data[front] = null; front = (front + 1) % (data.length); size--; return tempData; } public int size() { return size; } public E front() { if (isEmpty()) { throw new RuntimeException("队列为空!"); } return data[front]; } }
已有 0 人发表留言,猛击->>这里<<-参与讨论
JavaEye推荐
作者:
Chris Wang
出处:
http://chriswang.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。