首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据结构--队列Queue--循环顺序队列

数据结构--队列Queue--循环顺序队列

作者头像
Michael阿明
发布于 2021-02-20 02:26:46
发布于 2021-02-20 02:26:46
29000
代码可运行
举报
运行总次数:0
代码可运行

针对顺序队列中的入队操作:if 队列没满,但是队尾到达数组末尾了,队列"满"了,其实没有满,数据需要整体移至数组头部,才可以继续入队。 为解决该问题,避免数据的挪移,有了循环顺序队列

循环顺序队列的思路:

  1. 当队列未满,队尾到达数组末尾了,让 tail 的数组下标跳至0;
  2. 判断队列是否满,可以用队列长度==容量,或者用求模运算(少用一个数组空间,(tail+1)%capacity = head 则队列满了) 完成代码见:https://github.com/hitskyer/course/tree/master/dataAlgorithm/chenmingming/queue

1. 主要修改

入队函数修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool circularQueue<T>::enqueue(const T &data)
{
    if(full())
        return false;
    else
    {
        if(empty())
        {
            m_pHead = m_pTail = 0;
            arrQ[0] = data;
            m_QueueLen++;
        }
        else if(m_pTail < m_capacity-1)
        {
            arrQ[++m_pTail] = data;
            m_QueueLen++;
        }
        else    //队列没满,但是队尾到达数组末尾了,让tail变成-1
        {
            if(m_pTail + 1 == m_capacity)
                m_pTail = -1;
            arrQ[++m_pTail] = data;
            m_QueueLen++;
        }
        return true;
    }
}

打印函数修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void circularQueue<T>::print() const
{
    if(empty())
        cout << "empty queue!" << endl;
    cout << "circularQueue from head to tail as follow:" << endl;
    int j = m_pHead;
    for(UINT i = 0; i < m_QueueLen; )
    {
        if(j == m_capacity)     //打印时注意下标循环跳转
            j = 0;
        cout << "No." << ++i << " elem is " << arrQ[j++] << endl;
    }
    cout << "--------------print end----------------" << endl;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据结构--队列Queue--链式队列、顺序队列
队列:先进先出,就如排队一样,先到的,先排上 1.链式队列 1.1 头文件 listQueue.h /** * @description: 链式队列 * @author: michael ming * @date: 2019/4/1 22:47 * @modified by: */ #ifndef QUEUE_LISTQUEUE_H #define QUEUE_LISTQUEUE_H template <class T> struct SNode { T data; SNode*
Michael阿明
2021/02/20
6150
数据结构--队列Queue--链式队列、顺序队列
详解数据结构之队列、循环队列(源码)
队列:就好比如,我们在排队买东西时排队,第一个先来的第一个买,最后一个到的最后一个买,这里的队列也是满足先进先出,后进后出的规律(First In First Out),允许插入数据的一端叫做队头简称入队列,允许删除数据的一端叫做队尾简称出队列。
技匠晓晨
2024/11/26
2410
详解数据结构之队列、循环队列(源码)
跟源码学数据结构 |循环队列
https://blog.csdn.net/caoshangpa/article/details/79392878
早起的鸟儿有虫吃
2022/01/17
2850
数据结构与算法:队列
队列(Queue)就像是排队买票的人群。想象一下你去电影院看电影,人们在售票窗口形成一条线(队列)等待购票。队列遵循一个很重要的原则:先来先服务(First In, First Out,简称FIFO)。这意味着最先到达并排队的人将会是第一个买到票并离开队列的人,随后到达的人则依次排在队伍的后面,等待买票。
用户11029103
2024/03/19
1340
数据结构与算法:队列
【数据结构】队列的顺序表实现&&收尾栈和队列
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
每天都要进步呀
2023/03/28
5560
【数据结构】队列的顺序表实现&&收尾栈和队列
美团一面:循环队列听说过么,怎么实现?
为了避免当只有一个元素时,队头和队尾重合使处理变得麻烦,所以这里引入了队头和队尾两个指针,假设 front 指针指向队头元素,rear 指针指向队尾元素的下一个位置,这样:
飞天小牛肉
2023/09/19
2760
美团一面:循环队列听说过么,怎么实现?
数据结构小记【Python/C++版】——队列篇
队列是由同一种数据元素组成的线性表结构。使用单向队列时,插入元素在一端进行而删除元素在另一端进行。
Coder-ZZ
2023/02/23
3530
数据结构小记【Python/C++版】——队列篇
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
概念:在使用队列之前,需要先为队列分配内存空间并进行初始化设置,这包括确定队列的数据结构、存储方式以及相关指针(如果是链式队列)或索引(如果是顺序队列)的初始状态。
Rossy Yan
2024/12/24
1420
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
数据结构之栈和队列(超详解)
栈:⼀种特殊的线性表,只允许在固定的⼀端进行插入和删除元素操作。数据插入和删除操作 的一端称为栈顶,另⼀端称为栈底。栈中的元素遵守后进先出(或先进后出)的原则。
egoist祈
2025/02/04
2430
数据结构之栈和队列(超详解)
数据结构初步(九)- 栈和队列oj练习
,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例 1: 输入:
怠惰的未禾
2023/04/27
3390
数据结构初步(九)- 栈和队列oj练习
循环队列
(1)设一个容量为capacity=8,size=5(a,b,c,d,e)的数组,左侧为队首、右侧为队尾。
wfaceboss
2019/04/08
5280
循环队列
数据结构初阶:实现队列的两种方法
我们在实现栈的时候有 循环队列和链表队列两种方法。链表队是要用到两个结构体。一个结构体来存放数据,另一个结构体存放第一个结构体的指针然后用第二个结构体的指针来访问第一个结构体的指针和地址。这样做的好处是可以避免使用二级指针,进而优化算法。(因为在出队的时候要改变头指针的指向,但是形参不能改变实参,所以麻烦的方法是使用二级指针,然后解引用操作来改变头指针的地址,以达到出队的目的)。
用户11290664
2024/09/25
650
数据结构初阶:实现队列的两种方法
Java 循环队列原理与用法详解
(1)设一个容量为capacity=8,size=5(a,b,c,d,e)的数组,左侧为队首、右侧为队尾。
好好学java
2020/03/19
1.9K0
爆肝两万字,我爷爷都看的懂的《栈和队列》,建议各位观众姥爷先收藏
这里对于栈的实现我们既可以选择数组也可以和选择链表两者的效率都差不多,但是还是建议使用数组
全栈程序员站长
2022/09/05
4240
爆肝两万字,我爷爷都看的懂的《栈和队列》,建议各位观众姥爷先收藏
【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
  本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型   队列同样是一种特殊的线性表,其插入和删除的操作分别在表的两端进行,队列的特点就是先进先出(First In First Out)。我们把向队列中插入元素的过程称为入队(Enqueue),删除元素的过程称为出队(Dequeue)并把允许入队的一端称为队尾,允许出的的一端称为队头,没有任何元素的队列则称为空队。
Angel_Kitty
2018/04/09
1.3K0
【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
算法一看就懂之「 队列 」
算法的系列文章中,之前咱们已经聊过了「 数组和链表 」、「 堆栈 」,今天咱们再来继续看看「 队列 」这种数据结构。「 队列 」和「 堆栈 」比较类似,都属于线性表数据结构,并且都在操作上受到一定规则约束,都是非常常用的数据类型,咱们掌握得再熟练也不为过。
奎哥
2019/08/30
9080
算法一看就懂之「 队列 」
数据结构 第三章栈和队列
假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你需要用队列操作实现上述算法。请完成下面5个函数的操作。
十二惊惶
2024/02/28
3990
循环队列 基本概念「建议收藏」
循环队列是 队列的一种特殊形式。首先介绍队列,然后引申出循环队列。 队列又称为“先进先出”(FIFO)线性表 限定插入操作只能在队尾进行,而删除操作只能在队首进行 队列也可以采用顺序存储结构或链表结构来实现,分别称为顺序队列和链队列
全栈程序员站长
2022/08/23
9040
循环队列 基本概念「建议收藏」
【c数据结构】队列详解!(模拟实现、OJ练习实操)
概念:只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)
用户11292525
2024/10/12
1640
【c数据结构】队列详解!(模拟实现、OJ练习实操)
手撕数据结构---栈和队列的概念以及实现
栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
Undoom
2024/09/23
1110
手撕数据结构---栈和队列的概念以及实现
推荐阅读
相关推荐
数据结构--队列Queue--链式队列、顺序队列
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档