`
wangxiaohigh
  • 浏览: 1437400 次
文章分类
社区版块
存档分类
最新评论

队列(queue)之基础实现

 
阅读更多

队列类似于人员排队。首先加入列队的人最先得到服务,并第一个离队,队列项在队尾(back或rear)加入,从对头(front)离队。队列的操作只发生在两端,这使得队列具有先进后出(first-in first-out简写为FIFO)的特性,相对而言,可认为栈只有一端。因为所有的操作都在栈顶执行。这使得栈具有后进先出的特性。

以下是对的几个实现:

1、queue的异常处理类:

2、基于指针的队列的实现:


3、基于数组的队列的实现:

将数组看作为一个环形空间,通过在数组中顺时针移动front 和back 前移队列索引front(删除数据项)和back(插入数据项)。当front或back前移超过MAX-QUEUE-1 时,将返回0,从而消除了前面的实现中的右移的问题,因为循环数组不存在终点。在这种方案中唯一的困难是检测对空和队满的条件,似乎将“front 比back超前一个空间”作为对空的条件,这似乎说明:当队列变空时,front将超前back。只不过这个条件也可能指示一个队列已满。为此这里用了三种方法已标记队列的状态。

为初始化队列,将front设置为0,将back设置为MAX-QUEUE-1,在增加back和front时使用模运算(back=(back+1)%MAX-QUEUE),即可取得循环队列的返回效果。

1)设置一个int 成员变量count ,用于指示队列的项数。


2)设置一个bool 类型的变量isFull,当未满时为false,否则为true


3)为数组声明MAX-QUEUE+1个位置,但只使用其中的MAX-QUEUE个位置,剩下的一个数组位置,使front成为对头之前位置的索引。


这个实现没有维护计数器和标志的开销,但运行的时间更少,对于标准数据类型,该实现所需的空间与需要维护计算器或标志的实现相同,但对于比较复杂的数据,在额外数组位置上浪费的内存会非常大。


3、基于ADT的队列的实现:




分享到:
评论

相关推荐

    C语言实现队列,可做基础库

    C语言实现队列,测试功能完整,可以在作为基础库开发。 包含接口:Queue_Init、Queue_Free、Queue_AddToHead、Queue_AddToTail、Queue_GetFromHead、Queue_GetFromTail、OnQueueIncreasedEvent

    实验三队列实验报告.doc

    2. 循环队列的基本算法:在本实验中,实现了循环队列的基本算法,包括InitQueue、QueueEmpty、QueueFull、Add、Delete和display六个函数。InitQueue函数用于初始化一个空循环队列,QueueEmpty函数用于判断队列是否为...

    双端队列派生类

    双端队列,在基础类上派生 用来实现平移递推滤波数据存储

    数组和队列反转

    一个很简单适用的自定义编写的C#基础实现队列和反转数组,让你从最基础的C#来开始你的代码量的积累。

    java-Using-Array-for-Queue.zip_java队列实现

    用java语言中的数组来实现队列,其中扩容方法为在原数组的基础上乘以2,另外也测试了用java中Vector类实现队列。

    利用队列实现打印杨辉三角

    使用C++语言,数据结构基础从而利用队列实现杨辉三角的打印,

    打印机任务队列.pdf

    打印机任务队列.pdf 本文档总结了打印机任务队列的设计...本文档总结了打印机任务队列的设计报告,涵盖了队列的实现、打印机任务的优先级排序、打印机任务队列的设计和实现等知识点,为后续的开发和设计提供了基础。

    C语言-数据结构-栈队列实现

    C语言-数据结构-栈队列实现

    RabbitMq消息队列指南.docx

    RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。 MQ 为Message Queue , 消息...

    c++优先队列(priority_queue)用法详解

    优先队列具有队列的所有特性,包括队列的基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。 和队列基本操作相同: top 访问队头元素 empty 队列是否为空 size 返回队列内元素个数

    Lesson4--栈和队列.pdf

    栈和队列的实现方式、操作和应用场景各有不同,但它们都是计算机科学的基础知识。 栈的概念及结构 栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出(Last In First ...

    二维单调队列.docx

    二维单调队列通常用于解决滑动窗口等问题,它可以在滑动窗口的基础上维护一些额外的信息,以便在常数时间内处理查询。 以下是二维单调队列的一种可能实现(基于C++): ```cpp #include #include #include ...

    db-queue:在Java和数据库之上的worker-queue实现

    库在Java和数据库之上提供了工作队列的实现。 项目使用。 库在库中可用 <groupId>ru.yoomoney.tech <artifactId>db-queue <version>11.0.0 为什么? 有以下几个原因: 您需要简单,高效和灵活的任务处理工具...

    DS03_栈和队列 01_栈

    在计算机科学中,栈(Stack)和队列(Queue)是两种基础的数据结构,它们都是操作受限的线性表,区别在于栈的插入和删除操作只能在栈顶进行,而队列的插入操作在队尾,删除操作在队首。了解栈和队列的特点和操作方式...

    如何通过Python实现RabbitMQ延迟队列

    功夫不负有心人,RabbitMQ虽然没有现成可用的延迟队列,但是可以利用其两个重要特性来实现之:1、Time To Live(TTL)消息超时机制;2、Dead Letter Exchanges(DLX)死信队列。下面将具体描述实现原理以及实现代 延迟...

    C++基础学习之利用两个栈实现一个队列

    而队列queue的特点是先进先出;现在用两个 stack容器来实现队列: 实现代码: ------------------------------------- ------------- queue.h --------------- #pragma once #include #include #include using ...

    数据与算法课件:4 栈与队列.pdf

    数据结构与算法之栈与队列 数据结构与算法是计算机科学的基础课,栈和队列是数据结构的基本概念。在本文中,我们将详细介绍栈和队列的基本概念、特点、实现方法和应用场景。 一、栈的基本概念 栈(Stack)是一种...

    实验五栈与队列的应用实验报告.docx

    学生需要在预定义的顺序栈、链栈、顺序队列、循环队列、链队等结构类型的基础上设计和实现实验内容要求的函数,并进行调试和测试。 实验题目 1:已知 Q 是一个非空队列,S 是一个空栈。仅用队列和栈的基本操作和...

    设备驱动中阻塞与非阻塞及实现

    设备驱动中阻塞与非阻塞及实现:在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基础数据结构,与进程调度机制紧密...

    用自定的ArrayList实现队列

    队列的核心为先进先出,即先入队的元素先出队,在之前手写的ArrayList中添加了删除方法实现了队列 /** * 在之前自定义的动态数组基础上完成队列,动态数组中要添加删除方法 * * @author 大刘 */ public class ...

Global site tag (gtag.js) - Google Analytics