《数据结构(C语言版)》- 队列
来源:互联网 发布:java excel 合并 编辑:程序博客网 时间:2024/05/22 02:49
队列是一种先进先出(FIFO)的线性表,恰好与栈相反。队列只允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端叫做队尾,允许删除的一端称为队头。假设队列为
队列的抽象数据类型定义如下:
ADT Queue{数据对象:D={ai|ai∈ElemSet, i=1,2, …,n, n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D, i=1,2, …,n } 约定其中a1为队列头,an为队列尾。基本操作: InitQueue( &Q ) 操作结果:构造一个空队列Q。 DestroyQueue ( &Q ) 初始条件:队列Q已存在。 操作结果:销毁队列Q。 ClearQueue ( &Q ) 初始条件:队列Q已存在。 操作结果:将Q清为空队列。 QueueEmpty( Q ) 初始条件:队列Q已存在。 操作结果:若Q为空队列,则返回TRUE,否则返回FALSE。 QueueLength( Q ) 初始条件:队列Q已存在。 操作结果:返回Q的数据元素个数,即队列的长度。 GetHead( Q, &e ) 初始条件:队列Q已存在且非空。 操作结果:用e返回Q的队头元素。 EnQueue( &Q, e ) 初始条件:队列Q已存在。 操作结果:插入元素e为Q的新的队尾元素。 DeQueue( &Q, &e ) 初始条件:队列Q已存在且非空。 操作结果:删除Q的队头元素,并用e返回其值。QueueTraverse( Q, visit() ) 初始条件:队列Q已存在且非空。 操作结果:从队头到队尾依次对Q的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。}ADT Queue
下面则是队列的Java实现:
/** * 队列接口的实现类 */public class QueueImpl<T> implements Queue<T>{ /** * 队列对象 */ private Object[] queue = null; /** * 队列长度 */ private int len; /** * 队列最大长度 */ private int maxLen; /** * 构造一个空队列 * @param size */ public void InitQueue(int size){ this.queue = new Object[size]; this.len = 0; this.maxLen = size; } /** * 销毁队列 */ public void DestroyQueue(){ if(this.queue != null){ this.queue = null; this.maxLen = 0; this.len = 0; }else{ throw new IllegalArgumentException("队列不存在"); } } /** * 清空队列 */ public void CLearQueue(){ if(this.queue != null){ this.queue = new Object[this.maxLen]; this.len = 0; }else{ throw new IllegalArgumentException("队列不存在"); } } /** * 判断队列是否为空 * @return */ public Boolean QueueEmpty(){ if(this.queue != null) if(this.len != 0) return false; else return true; else throw new IllegalArgumentException("队列不存在"); } /** * 求队列的长度 * @return */ public int QueueLength(){ if(this.queue != null){ return this.len; }else throw new IllegalArgumentException("队列不存在"); } /** * 返回队列的队头元素 * @return */ public T GetHead(){ if(this.queue != null){ return (T) this.queue[0]; }else throw new IllegalArgumentException("队列不存在"); } /** * 插入元素为新的队尾元素 * @param e */ public void EnQueue(T e){ if(this.queue != null && this.len != this.maxLen){ this.queue[this.len] = e; this.len++; }else throw new IllegalArgumentException("队列不存在或者已满"); } /** * 删除队列的队头元素 * @return */ public T DeQueue(){ if(this.queue != null && this.len > 0){ Object[] newQueue = new Object[this.maxLen]; for(int i = 1;i < this.len;i++) newQueue[i-1] = this.queue[i]; T e = (T) this.queue[0]; this.queue = newQueue; this.len = newQueue.length; return e; }else throw new IllegalArgumentException("队列不存在或者为空"); } /** * 从队头到队尾依次对队列中每个元素调用函数visit() */ public void QueueTraverse(){ Object[] newQueue = new Object[this.maxLen]; for(int i = 0;i < this.len;i++) newQueue[i] = visit((T) this.queue[i]); this.queue = newQueue; } /** * visit函数 * @param e */ public T visit(T e){ return (T) e.toString(); } public static void main(String[] args) { Queue queue = new QueueImpl(); queue.InitQueue(5);//初始化队列 //queue.DestroyQueue();//销毁队列 //queue.CLearQueue();//清空队列 Boolean flag = queue.QueueEmpty();//判断队列是否存在 int len = queue.QueueLength();//求队列的长度 queue.EnQueue(3);//插入新元素 queue.EnQueue(4);//插入新元素 queue.EnQueue(5);//插入新元素 queue.EnQueue(6);//插入新元素 queue.EnQueue(7);//插入新元素 queue.DeQueue();//删除队头元素 queue.QueueTraverse();//从队头到队尾 }}/** * 队列接口 */public interface Queue<T> { /** * 构造一个空队列 * @param size */ void InitQueue(int size); /** * 销毁队列 */ void DestroyQueue(); /** * 清空队列 */ void CLearQueue(); /** * 判断队列是否为空 * @return */ Boolean QueueEmpty(); /** * 求队列的长度 * @return */ int QueueLength(); /** * 返回队列的队头元素 * @return */ T GetHead(); /** * 插入元素为新的队尾元素 * @param e */ void EnQueue(T e); /** * 删除队列的队头元素 * @return */ T DeQueue(); /** * 从队头到队尾依次对队列中每个元素调用函数visit() */ void QueueTraverse(); /** * visit函数 * @param e */ T visit(T e);}
阅读全文
1 0
- 数据结构-队列(C语言版)
- 《数据结构(C语言版)》- 队列
- 数据结构(1)队列(C语言版)
- 数据结构之队列(C语言版)
- 数据结构(C语言版)规范代码之队列
- c语言版数据结构(奇迹冬瓜)-单链式队列
- 数据结构(C语言版)链队列的基本操作
- 学习笔记------数据结构(C语言版)队列链式存储
- 数据结构与算法(C语言版)__队列
- 数据结构与算法(C语言版)__链式队列
- 数据结构 链队列的建立及其函数 C语言版
- 循环队列(C语言版)
- 链队列-C语言版
- 队列(C语言版)
- 数据结构C语言版 哈希表
- 数据结构(C语言版)
- 数据结构(C语言版)
- 数据结构-c语言版大纲
- 从emacs安装理解windows的PATH
- tcp四次挥手中LAST_ACK状态一般持续多久?
- STM32F103mini基础知识归纳
- 线程间通讯的机制——Hanlder
- 1047. Student List for Course (25)
- 《数据结构(C语言版)》- 队列
- sql语句
- 文件权限篇(二)
- WIFI 考勤打卡 浅析
- [bzoj3994]约数个数和
- gridview xian
- 判断大小端模式与共用体
- golang json解析出现值为空
- CodeVS 1063 合并果子 题解