【算法导论学习-18】queue的数组实现
2014-08-23 18:34
525 查看
参考:http://zengzhaoshuai.iteye.com/blog/1171716
这里指的是循环队列。
先写一个接口:
队空: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: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 stub head=tail=0; capacity=DEFAULT_SIZE; elementData=new Object[capacity]; } public MyQueue(int capacity) { // TODO Auto-generated constructor stub head=tail=0; this.capacity=capacity; elementData=new Object[capacity]; } @Override public void enqueue(T element) { // TODO Auto-generated method stub if (isFull()) { throw new IndexOutOfBoundsException("队列已满的异常"); } elementData[tail++]=element; tail=tail==capacity?0:tail; } @Override public T dequeue() { // TODO Auto-generated method stub if (isEmpty()) { throw new IndexOutOfBoundsException("空队列异常"); } @SuppressWarnings("unchecked") T oldElement=(T)elementData[head]; elementData[head++]=null; head=head==capacity?0:head; return oldElement; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return head==tail&&elementData[tail]==null; } @Override public boolean isFull() { // TODO Auto-generated method stub return head==tail&&elementData[head]!=null; } }
相关文章推荐
- 【算法导论学习-17】stack的数组实现
- 【算法导论学习-19】1个stack实现queue
- 算法导论 10.1-2 用一个数组实现两个栈
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 习题2.8 随机数组的三种生成算法(补) 将bash的实现翻译成比较纯正的bash风格
- 算法导论------------栈(stack)简单的数组实现
- 算法导论学习笔记(1)——快排中hoarePartition的实现(问题已解决)
- 算法学习---对象类型的数组二分查找实现
- 【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time)
- 【算法导论学习-007】最大子数组和问题(Maximum subarray problem)
- 【算法导论学习-22】二叉树专题1:一般二叉树的实现和常用处理函数
- 从一个数组中找出第k小元素的随机化算法 c语言实现 算法导论第九章
- 算法学习---基本数据类型的数组二分查找实现
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(7)习题2.8 随机数组的三种生成算法
- 算法导论学习笔记-找数组中第二小的数
- 数据结构与算法学习笔记——链表部分实现(数组形式)
- C++最大堆实现priority_queue优先级队列(算法导论)
- 数组实现堆排序(来源算法导论)
- 【算法导论学习-016】两个已排过序的等长数组的中位数(median of two sorted arrays)