首页 > 其他分享 >循环队列

循环队列

时间:2022-10-07 21:24:53浏览次数:53  
标签:队列 SqQueue 入队 MaxSize 循环 front rear

循环队列

1.队列的定义

队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表 队尾(rear)——允许插入的一端 队头(front)——允许删除的一端 队列特点:先进先出(FIFO)

2. 循环队列

循环队列是队列的一种顺序表示和实现方法。 用一组地址连续的存储单元依次存放从队头到队尾的元素

3.初始化循环队列

3.1数据结构

typedef struct {
    ElemType data[MaxSize];//储存MaxSize减一个元素
    int front, rear;//队列头和队列尾
}SqQueue;

3.2 定义空队列

void InitSqQueue(SqQueue &Q)
{
    Q.front = Q.rear = 0;
}

4.入队

4.1算法思想

  1. 判断队列是否满,栈满无法入队列

    1. 当Q.rear与Q.front相差一个单位时 队列满

  2. rear是从零开始递增的,当rear=Maxsize-1时,再进行入队操作,会使得rear 指向0,此时用普通的 rear自增已经无法实现该操作

  3. 所以使用Q.front等于(Q.rear + 1) % MaxSize

  4. 所以栈满条件为(Q.rear+1)%MaxSize 等于 Q.front

4.2算法设计

bool EnQueue(SqQueue& Q,ElemType e)
{
    if((Q.rear+1)%MaxSize == Q.front)
    {
        return false;//栈满
    }
    Q.data[Q.rear] = e;
    Q.rear = (Q.rear + 1) % MaxSize;
    return true;
}

5.出队

5.1算法思想

  1. 判断队列是否为空,为空则不能出队

    1. 队列为空的条件为 Q.front等于Q.rear

  2. 与入队同理 当出队时,要将(Q.front + 1) % MaxSize赋于Q.front

5.2算法设计

bool DeQueue(SqQueue& Q)
{
    if(Q.front==Q.rear)
    {
        return false;
    }
    Q.front = (Q.front + 1) % MaxSize;
}
 

标签:队列,SqQueue,入队,MaxSize,循环,front,rear
From: https://www.cnblogs.com/wlb429/p/16763886.html

相关文章

  • rabbitmq,rocketmq消息队列可提高系统可用性以及可扩展性
     rabbitmq,rocketmq消息队列可提高系统可用性以及可扩展性  一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实......
  • 关于tkinter-gui窗体中循环周期性执行某段代码的方法记录
    最近笔者在写一个窗体程序时,希望能每隔1秒,周期性的定时刷新文本框中的内容,但最后发现很难实现出现各种各样的问题,最后通过查询大量的资料,才找到原因和解决方法为了阐述清......
  • CF1256E. Yet Another Division Into Teams 题解 单调队列优化dp
    题目链接:https://codeforces.com/contest/1256/problem/E将\(n\)个数分成若干队,每一队至少包含\(3\)个整数,每一队的代价是最大值与最小值只差,求所有队伍代价之和的最......
  • C语言下for循环的一点技巧总结
    for循环是普遍应用与各种计算机语言的一种循环方式。一般情况下,for循环规则:for(条件一;条件二;条件三)条件一为满足条件,也就是条件一为1时,进入这个for循环。条件二为循环......
  • C语言:ASCII码为0的字符成为循环条件
    #include<stdio.h>main(){chars[]="012xy\08s34f4w2";//ascii码0对应的字符为空字符//本来\08可以理解为1个字符,但8不是8进制数,斜线只能转义0//......
  • 浅谈单调队列
    单调队列,顾名思义就是一个元素之间的关系具有单调性的队列我们通过一道例题来讲解最大子序和题目大意给定一个长度为\(N\)的整数序列(可能有负数),从中找出一段长度不超......
  • 消息队列 基础概念
    消息队列基本概念什么是消息队列异步通讯的中间件:存放消息的容器。当我们需要使用消息时,取出消息供我们使用。消息是一种数据结构(当然,对象也可以看做是一种特殊的消......
  • 测试for和foreach循环跳出中断的问题
    1、for循环for使用return、break,是跳出了整个循环。 for(vari=0;i<5;i++){      console.log(i)      if(i==3){   ......
  • STL优先队列
    STL大法好STL优先队列就是一个封装的堆,学会熟练运用,免去手写堆的麻烦其实是不会自己写格式:priority_queue<类型,vector<类型>,比较类>q;优先队列的源码比较奇特......
  • 1.5 基本语法_循环结构 for ... in... 循环,while 循环,break与continue
    #for... in... 遍历循环foriinrange(1,6):#数字遍历print(i)forchin'Python':#字符串遍历print(ch)#循环结构的while......