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

队列(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

    双端队列派生类

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

    数组和队列反转

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

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

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

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

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

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

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

    RabbitMq消息队列指南.docx

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

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

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

    二维单调队列.docx

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

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

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

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

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

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

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

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

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

    用自定的ArrayList实现队列

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

    C语言基础-实现的单线程高并发的网络基础库

    co_queue 循环队列 co_pqueue 优先队列 co_buffer 可读写bufer,环形buffer co_utf8 utf8解码 ca_falloc 固定长度的分配器 co_endian 大小端字节序的转换 网络库 co_timingwheel 基于时间轮的高效定时器 co_timer...

    queue:内存FIFO队列中PHP

    队列使用php 实现。 该库可用于pcntl_fork , worker等。用法 <?php$ q = new Grei \ Queue ( $ byte ); // default 1000000 byte$ q -> enqueue ( $ item ); // add item to queue$ q -> dequeue (); // remove ...

    JAVA编程之Spring boot-activeMQ示例

    # Springboot-activeMQ 本项目基于Spring boot这一平台,整合流行的开源...2.队列类型queue,生产者发送队列消息,以及消费者消费相关队列消息 3.主题类型topic,创建主题,生产者发送主题消息,以及消费着消费主题消息

    madlib-promise-queue:使用 Promise 的通用队列机制

    madlib-promise-queue 使用 Promise 的通用队列机制 致谢 Marviq 应用程序开发库(又名 madlib)是我在 Marviq 工作时开发的。 他们很酷,让我可以使用我的个人 github 帐户而不是公司帐户发布它。 我们决定将其...

    消息队列服务HazelcastMQ.zip

    HazelcastMQ 在基础的 Queue 和 Topic 数据结构的基础上通过 Hazelcat 提供一个简单的消息层。HazelcastMQ 强调简单的配置和可靠的集群,提供一个可理解和灵活的信息 API。HazelcastMQ 是基于 Hazelcast 的核心特性...

    基于C++实现的操作系统进程调度可视化与模拟源码+实验报告.zip

    3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 欢迎下载,欢迎交流,互相学习进步! 一、实验目的 多道系统中,进程与进程之间存在同步与互斥关系。当就绪进程数大于处理机数时,需按照某种策略...

Global site tag (gtag.js) - Google Analytics