队列类似于人员排队。首先加入列队的人最先得到服务,并第一个离队,队列项在队尾(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语言实现队列,测试功能完整,可以在作为基础库开发。 包含接口:Queue_Init、Queue_Free、Queue_AddToHead、Queue_AddToTail、Queue_GetFromHead、Queue_GetFromTail、OnQueueIncreasedEvent
双端队列,在基础类上派生 用来实现平移递推滤波数据存储
一个很简单适用的自定义编写的C#基础实现队列和反转数组,让你从最基础的C#来开始你的代码量的积累。
用java语言中的数组来实现队列,其中扩容方法为在原数组的基础上乘以2,另外也测试了用java中Vector类实现队列。
使用C++语言,数据结构基础从而利用队列实现杨辉三角的打印,
C语言-数据结构-栈队列实现
RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。 MQ 为Message Queue , 消息...
优先队列具有队列的所有特性,包括队列的基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。 和队列基本操作相同: top 访问队头元素 empty 队列是否为空 size 返回队列内元素个数
二维单调队列通常用于解决滑动窗口等问题,它可以在滑动窗口的基础上维护一些额外的信息,以便在常数时间内处理查询。 以下是二维单调队列的一种可能实现(基于C++): ```cpp #include #include #include ...
库在Java和数据库之上提供了工作队列的实现。 项目使用。 库在库中可用 <groupId>ru.yoomoney.tech <artifactId>db-queue <version>11.0.0 为什么? 有以下几个原因: 您需要简单,高效和灵活的任务处理工具...
功夫不负有心人,RabbitMQ虽然没有现成可用的延迟队列,但是可以利用其两个重要特性来实现之:1、Time To Live(TTL)消息超时机制;2、Dead Letter Exchanges(DLX)死信队列。下面将具体描述实现原理以及实现代 延迟...
而队列queue的特点是先进先出;现在用两个 stack容器来实现队列: 实现代码: ------------------------------------- ------------- queue.h --------------- #pragma once #include #include #include using ...
设备驱动中阻塞与非阻塞及实现:在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基础数据结构,与进程调度机制紧密...
队列的核心为先进先出,即先入队的元素先出队,在之前手写的ArrayList中添加了删除方法实现了队列 /** * 在之前自定义的动态数组基础上完成队列,动态数组中要添加删除方法 * * @author 大刘 */ public class ...
co_queue 循环队列 co_pqueue 优先队列 co_buffer 可读写bufer,环形buffer co_utf8 utf8解码 ca_falloc 固定长度的分配器 co_endian 大小端字节序的转换 网络库 co_timingwheel 基于时间轮的高效定时器 co_timer...
队列使用php 实现。 该库可用于pcntl_fork , worker等。用法 <?php$ q = new Grei \ Queue ( $ byte ); // default 1000000 byte$ q -> enqueue ( $ item ); // add item to queue$ q -> dequeue (); // remove ...
# Springboot-activeMQ 本项目基于Spring boot这一平台,整合流行的开源...2.队列类型queue,生产者发送队列消息,以及消费者消费相关队列消息 3.主题类型topic,创建主题,生产者发送主题消息,以及消费着消费主题消息
madlib-promise-queue 使用 Promise 的通用队列机制 致谢 Marviq 应用程序开发库(又名 madlib)是我在 Marviq 工作时开发的。 他们很酷,让我可以使用我的个人 github 帐户而不是公司帐户发布它。 我们决定将其...
HazelcastMQ 在基础的 Queue 和 Topic 数据结构的基础上通过 Hazelcat 提供一个简单的消息层。HazelcastMQ 强调简单的配置和可靠的集群,提供一个可理解和灵活的信息 API。HazelcastMQ 是基于 Hazelcast 的核心特性...
3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 欢迎下载,欢迎交流,互相学习进步! 一、实验目的 多道系统中,进程与进程之间存在同步与互斥关系。当就绪进程数大于处理机数时,需按照某种策略...