【算法导论学习-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
- 【算法导论学习-18】queue的数组实现
- 【算法导论学习-19】1个stack实现queue
- 【算法导论学习-17】stack的数组实现
- 《算法导论》学习笔记之Chapter10---队列的数组实现
- 算法导论-------------队列(queue)的简单实现
- 栈和队列的数组实现—《算法导论》学习笔记之六
- 《算法导论》学习笔记之Chapter10基本数据结构---栈的数组实现
- 算法导论示例-Queue
- 算法导论(min-priority-queue 最小优先队列的部分实现)
- 算法导论------------栈(stack)简单的数组实现
- 《算法导论》中求最大子数组的C++实现
- 算法导论学习笔记—Strassen算法的Java实现
- 【算法导论学习-20】单链表(single linked)的实现
- 算法导论学习:插入排序法的实现
- 算法导论学习:归并排序法的实现
- 算法导论学习笔记(Java实现)
- 算法导论学习-插入排序python实现
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- ACM 二分答案 二分查找 hdu4071
- Android Framework------之Keyguard 简单分析
- 利用消息通知中心CCNotificationCenter来传递不同层之间的数据
- WF事件驱动(1)
- linux 下 apache启动、停止、重启命令
- 【算法导论学习-18】queue的数组实现
- 同步的本质 java内存模型 happen before order
- 初始化列表的作用
- 【Unity Shaders】使用CgInclude让你的Shader模块化——Unity内置的CgInclude文件
- hdoj 3572 Task Schedule【最大流】
- HDU 1829 A Bug's Life 并查集
- poj 1491 gcd(求PI的近似值)
- 【坑】在js代码中误用保留关键字
- HDU 1325 Is It A Tree? 并查集