循环队列|超详细|数据结构学习讲解与笔记

  • 队列元素先进先出
  • 队列只允许在线性表的一端进行操作,是一种操作受限的线性表

队列的基本操作

  • InItQueue(&Q)初始化队列,构造一个空队列 Q
  • EmptyQueue(Q)队列判空
  • FullQueue(Q)队列判满
  • EnQueue(&Q , x)入队操作
  • DeQueue(&Q , &x)出队操作
  • GetQueue(Q, &x)获取队头元素

队列的顺序存储

  • 用‘以数组实现的顺序表’来实现队列的顺序存储
  • 设置两个指针
    • 队头指针 front:指向队头元素
    • 队尾指针 rear:指向队尾元素的下一个位置
#define MaxSize 100
typedef struct{ElemType data[MaxSize];int front,rear;
}SqQueue; 

image.png
使用顺序存储存在的问题:

  • 当队列为空时 frontrear,但是,当队列存满元素 又全部出队后,此时队列为空,frontrear。但是此时两个指针已经到了数组最后,无法继续向后移动,此时数组为空也无法继续插入新元素。如果继续插入新元素,就会“假溢出”,假溢出就是数组中仍然有可以继续存入新数据的空位置,但无法继续插入了。
  • 当队列满时,rear+1MaxSize,如上图 4,当队列只有一个元素时,也是rear+1MaxSize

循环队列

为了解决上面顺序队列的问题,可以使用循环队列
image.png

  • 队空:rear==front
  • 队满:(rear+1)%MaxSize==front
  • 队列元素个数:(rear-front+MaxSize)%MaxSize

判断队列空与满的其他方式:

  • 定义队列类型时增加 size 变量表示元素个数。删除成功 size 减 1,插入成功 size 加 1。队空时 size0,队满时 size=MaxSize;两种情况都有 frontrear
  • 定义队列类型时增加 stag 变量。删除一个元素时 tag=0,插入一个元素时 tag=1。当 rearfront 时,如果 tag0,就是队空,如果 tag==1,就是队满

循环队列的基本操作

d1e30eccbbc8e1b65bf5b4e5d863ada.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI新爆款Sora,大佬们怎么看?

OpenAI新爆款Sora的热度持续发酵,在科技圈的刷屏阵仗都快赶上正月初五迎财神了。 智东西2月17日报道,这两天,OpenAI首款文生视频大模型Sora以黑马之姿占据AI领域话题中心,马斯克、杨立昆、贾扬清、Jim Fan、谢赛宁、周鸿祎、李志…

【动态规划专栏】专题一:斐波那契数列模型--------2.三步问题

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

数据结构-最短路径(Dijkstra算法与Floyd算法)

介绍 对于网图来说,最短路径是指两顶点之间经过的边上权值之和最少的路径,其路径上第一个点记为源点,最后一个为终点。 计算最短路径有两个经典算法,即迪杰斯特拉(Dijkstra)算法与弗洛伊德(Fl…

unity学习(20)——客户端与服务器合力完成注册功能(2)调试注册逻辑

接着上一节的问题,想办法升级成具备数据库功能的服务器,这个是必须的。 至少在初始化要学会把文件转换为session,新知识,有挑战的。 现在是从LoginHandler.cs跳到了AccountBiz.cs的create,跳度还是很大的。 create函…

oauthlib,一个强大的 Python 身份校验库!

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 什么是 OAuthLib? 安装 OAuthLib OAuthLib 的主要功能 OAuthLib 的用法 实现…

文案馆头像壁纸微信小程序源码【支持流量主】

文案馆头像壁纸微信小程序源码【支持流量主】 源码介绍:文案馆头像壁纸微信小程序源码是一款可以获取套图、头像、壁纸的小程序。小程序源码内置流量主功能 需求环境:微信小程序phpmysql 下载地址: https://www.changyouzuhao.cn/13453.ht…

【C语言】长篇详解,字符系列篇2-----受长度限制的字符串函数,字符串函数的使用和模拟实现【图文详解】

欢迎来CILMY23的博客喔,本期系列为【【C语言】长篇详解,字符系列篇2-----“混杂”的字符串函数,字符串函数的使用和模拟实现【图文详解】,图文讲解各种字符串函数,带大家更深刻理解C语言中各种字符串函数的应用&#x…

即时设计是什么?

在过去的两年里,由于疫情的推动以及科学技术的不断进步,国内外协同办公室发展迅速。在市场的推动下,市场上出现了越来越多的协同办公软件,使工作场所的工作更加高效。 在设计领域,具有协同功能的软件市场似乎仍处于空…

记一个大坑: 树莓派上docker运行motioneye找不到摄像头

当在树莓派上执行这段命令后,将创建montioneye容器 docker run --name"motioneye" \-p 8765:8765 \--hostname"motioneye" \-v /etc/localtime:/etc/localtime:ro \-v /etc/motioneye:/etc/motioneye \-v /var/lib/motioneye:/var/lib/motione…

162基于matlab的多尺度和谱峭度算法对振动信号进行降噪处理

基于matlab的多尺度和谱峭度算法对振动信号进行降噪处理,选择信号峭度最大的频段进行滤波,输出多尺度谱峭度及降噪结果。程序已调通,可直接运行。 162 matlab 信号处理 多尺度谱峭度 (xiaohongshu.com)

用Windows桌面应用程序制作一个扫雷游戏

游戏介绍: 这段代码是一个简易版的扫雷游戏的主程序部分。游戏分为几个主要部分: **主函数 (main)**:负责整个游戏流程的控制。首先,它初始化了一个枚举类型的变量 input 用于存储玩家的选择。然后,进入一个循环,在这个循环中,它会显示游戏菜单,接收玩家的输入,并根…

mysql 2-1

添加数据 方式二 更新数据 删除数据 小结 计算列 数据类型 可选属性 适用场景 如何选择 浮点类型 存在精度问题 定点数介绍 BIT类型 日期与时间类型 YEAR类型 DATA类型 TIME类型 DATATIME TIMESTAMP 文本字符串类型 适用场景 TEXT类型

基于Springboot的校园求职招聘系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校园求职招聘系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

Git基本操作(超详细)

文章目录 创建Git本地仓库配置Git配置命令查看是否配置成功重置配置 工作区、暂存区、版本库添加文件--场景一概述实例操作 查看.git文件添加文件--场景二修改文件版本回退撤销修改情况⼀:对于工作区的代码,还没有 add情况⼆:已经 add &#…

大白话说说redux

redux的3个重要概念 store 就是用来存放应用的各种状态的action 就是用来描述应用发生了什么动作的,注意理解他是对动作的描述reducer 就是用来处理应用的动作,并且决定怎么去更新应用存放在store里面的状态。 redux的3个原则 应用的所有状态存储为re…

BUGKU-WEB 源代码

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 你说啥就是啥&#xff1a;去源代码吧 相关工具 URL解码平台&#xff1a;https://www.iamwawa.cn/urldecode.html 解题步骤 随便输入试试 2. 看看源码 存在script&#xff1a; <script> …

Java学习--黑马SpringBoot3课程个人总结-2024-02-14

1.子路由 //定义路由关系 const routes[{ path: /login, component: LoginVue},{ path: /, component: LayoutVue,redirect:/article/manage,children:[{path:/article/category,component:ArticleCategoryVue},{path:/article/manage,component:ArticleManageVue},{path:/…

IO-day3

思维导图 1.使用fread和fwrite完成图片的拷贝。 2.使用read和write完成两个文件的拷贝。 3.将时间在文件中跑起来。

Mock.js

在开发后端的应用中&#xff0c;我们使用postman来测试接口&#xff0c;观察和验证前后端之间的数据传递是否正常。 在开发前端的应用中&#xff0c;我们使用Mock.js来模拟后端服务&#xff0c;以便进行前端业务逻辑的开发和测试&#xff08;以前使用json-server也很方便&#…

问题描述:在Windows下没有预装ninja工具

问题描述:在Windows下没有预装ninja工具 # WInR输入cmd回车进入命令行,执行以下命令查看版本信息 ninja --version没有预装ninja工具 解决方案&#xff1a;下载安装ninja 在windows下安装gitbash和python。 打开cmd在合适位置下载ninja源码&#xff1a; git clone https://g…