03-3.2.2 队列的顺序存储实现

  • 👋 Hi, I’m @Beast Cheng
  • 👀 I’m interested in photography, hiking, landscape…
  • 🌱 I’m currently learning python, javascript, kotlin…
  • 📫 How to reach me --> 458290771@qq.com

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
此外,《程序员必备技能》专栏和《程序员必备工具》专栏(该专栏暂未开设)日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

定义结构体

#define MaxSize 10
typedef struct{ElemType data[MaxSize]; //用静态数组存放元素int front, rear;        //队头指针和队尾指针
}SqQueue;

声明队列

void testQueue(){SqQueue Q;//......
}

rear应该指向队尾元素的后一个位置(下一个应该插入的位置)
初始化时应该写如下代码:

void InitQueue(SqQueue &Q){//头尾指针都指向0Q.rear = Q.front = 0;
}

判空

bool QueueEmpty(SqQueue Q){if(Q.rear == Q.front)  //队空return true;elsereturn false;
}

入队操作

bool EnQueue(SqQueue &Q, ElemType x){if((Q.rear+1)%MaxSize == Q.front) //队列已满return false;                 //队满则报错Q.data[Q.rear] = x;               //将x插入队尾Q.rear = (Q.rear + 1) % MaxSize;  //队尾指针+1然后取模,因为我们的最大值是10,只要不满10,得到的就是0,于是队尾指针又会重新指回0return true;
}

出队操作

bool DeQueue(SqQueue &Q, ElemType &x){if(Q.rear == Q.front)   //判空return false;       //队列已空x = Q.data[Q.front];Q.front = (Q.front + 1) % MaxSize; //队头指针后移return true;
}

查询

bool GetHead(SqQueue Q, ElemType &x){if(Q.rear == Q.front)return false;    //队空则报错x = Q.data[Q.front];return true;
}

判断队列已满/已空

方案一

队列已满的条件:队尾指针的再下一个位置就是队头,即(Q.rear+1) % MaxSize == Q.front
我们可以通过(rear+MaxSize-front) % MaxSize计算队列元素的个数

方案二

#define MaxSize 10
typedef struct{ElemType data[MaxSize];int front, rear;int size;  //队列当前长度
}SqQueue;
/*
* 初始化时 rear=front=0; size=0;
* 插入成功 size++; 
* 删除成功 size--;
* 队满条件 size==MaxSize
* */

方案三

#define MaxSize 10
typedef struct{ElemType data[MaxSize];int front, rear;int tag;    //最近进行的是插入还是删除?插入是1,删除是0
}SqQueue;
/*
* 每次删除操作成功时,都令tag=0;
* 每次插入操作成功时,都令tag=1;
* 队空条件 front=rear && tag==0
* 队满条件 front=rear && tag==1
*/

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

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

相关文章

kali中安装、卸载程序教程

1、安装教程 ①、使用apt安装 apt update (先更新apt) apt-get install xxxx(xxx为需要安装的软件名)②、使用dpkg安装 dpkg –i deb的软件包名(需要在软件包的目录下使用,不然就要把地址加上)二、卸载教程 ①、使…

hudi开启了流读,read.streaming.enabled为true,还需要设置查询类型吗 如snapshot

在使用 Apache Hudi 时,尤其是开启了流式读取(read.streaming.enabled 为 true),配置查询类型非常重要。查询类型决定了如何读取数据,尤其是在处理更新和删除操作时。 查询类型选项 在 Hudi 中,常见的查询…

ViewModel原理分析

认识 ViewModel ViewModel 是一种用来存储和管理UI相关数据的类。 ViewModel 的作用可以从两个方面去理解: UI界面控制器:在最初的MVC模式中,由于 Activity / Fragment 承担的职责过重,因此在后续的 MVP、MVVM 模式中&#xff…

基于JSP技术的人事管理系统

你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:浏览器(如360浏览器、谷歌浏览器、QQ浏览器等&#xff…

深度神经网络——什么是扩散模型?

1. 概述 在人工智能的浩瀚领域中,扩散模型正成为技术创新的先锋,它们彻底改变了我们处理复杂问题的方式,特别是在生成式人工智能方面。这些模型基于高斯过程、方差分析、微分方程和序列生成等坚实的数学理论构建。 业界巨头如Nvidia、Google…

【C语言】文件操作(下卷)

前言 在上一卷中,我们知道了文件指针、文件的打开和关闭(打开其他位置的文件)、文件的顺序读写(其中的fputc()、fgetc()),这一卷中,将继续讲解文件操作未讲到的地方。 内容有点多,…

人大金仓数据库报sys_user表字段不存在的问题

目录 一.问题: 二.原因 三.解决方法: 一.问题: 公司的一个项目从oracle切换到人大金仓之后,突然报了一个sys_user里面的字段不存在。 二.原因 检查了很多次确信sys_user表没问题,查了相应的文档之后发现原来人大金…

企业自建邮件系统的优势,安全性更高,功能更灵活,维护更便捷

在当今企业信息管理的浪潮中,企业邮件系统显得尤为关键,它不仅加强了内部的沟通效率,还对外展示了企业的专业形象。然而,传统租用企业邮箱服务存在一些不足,如缺乏灵活性、数据管理混乱和难以实现个性化需求&#xff0…

Wireshark 如何查找包含特定数据的数据帧

1、查找包含特定 string 的数据帧 使用如下指令: 双引号中所要查找的字符串 frame contains "xxx" 查找字符串 “heartbeat” 示例: 2、查找包含特定16进制的数据帧 使用如下指令: TCP:在TCP流中查找 tcp contai…

HOW - 面试技巧系列 - 全英文面试

自我介绍 “can you tell me a little bit about yourself?” “please introduce yourself.” 工作经验 “can you describe your most recent job experience?” “how does your experience make you a good fit for this position?” 职业规划 “what are your l…

C语言---指针part2

指针操作 一维 字符数组 1. 字符型数组 --- 存放字符串的 char s[] "hello"; [h ] <---0x1000 [e ] [l ] [l ] [o ] [\0] //谁能这块空间的地址 --- 数组名 s --->怎么能保存s所代表的地址值 //s数组名 --- 数组首元素的地址 &s[0] --->地…

谷歌浏览器使用--disable-web-security --user-data-dir解决跨域的解释

–disable-web-security 和 --user-data-dir 是Google Chrome&#xff08;及其开源版本Chromium&#xff09;浏览器在启动时可以使用的命令行参数。下面我将分别解释这两个参数的含义和用途&#xff1a; 1.–disable-web-security 含义&#xff1a;这个参数用于禁用Chrome浏览…

服务器数据恢复—raid5阵列上层XFS文件系统数据恢复案例

服务器存储数据恢复环境&#xff1a; 某品牌CX4-480型号服务器存储&#xff0c;该服务器存储内有一组由20块硬盘组建的raid5磁盘阵列&#xff1b;存储空间分配了1个lun。 服务器存储故障&#xff1a; 工作人员将服务器重装操作系统后&#xff0c;未知原因导致服务器操作系统层…

9. 媒体查询与响应式设计

随着移动设备和不同尺寸屏幕的普及&#xff0c;响应式设计成为前端开发的重要组成部分。响应式设计确保网页在不同设备上都有良好的用户体验。本章将详细介绍媒体查询的基础知识、语法与使用方法&#xff0c;以及如何运用CSS3实现响应式设计。 9.1 媒体查询基础 媒体查询是CS…

Flink协调器Coordinator及自定义Operator

Flink协调器Coordinator及自定义Operator 最近的项目开发过程中&#xff0c;使用到了Flink中的协调器以及自定义算子相关的内容&#xff0c;本篇文章主要介绍Flink中的协调器是什么&#xff0c;如何用&#xff0c;以及协调器与算子间的交互。 协调器Coordinator Flink中的协调…

LlamaIndex 一 简单文档查询

前言 在学习LangChain的时候&#xff0c;我接触到了LlamaIndex。它犹如我在开发vue时用到的axios&#xff0c;主要负责数据打理。别问我为什么打这个比方&#xff0c;前端老狗&#xff0c;重走AI路&#xff0c;闭关一年能否学的妥当&#xff1f; LlamaIndex 是一个用于 LLM 应…

前端项目打包、部署的基础 (vue)

详细请看B站视频 BV19n4y1d7Gr 《禹神&#xff1a;前端项目部署指南&#xff0c;前端项目打包上线》&#xff0c;本博客为自用视频笔记。 目录 项目打包vue打包打包前分析项目请求 本地服务器部署问题 & 解决问题1&#xff1a;刷新页面404问题问题2&#xff1a;ajax请求废…

【人工智能】第六部分:ChatGPT的进一步发展和研究方向

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

秀肌肉-海外短剧系统的案例展示

多语种可以选择&#xff0c;分销功能&#xff0c;多种海外支付方式&#xff0c;多种登录模式可供选择&#xff0c;总之你想到的我们都做了&#xff0c;你没想到的我们也都做了

企微自动化机器人的应用与前景

一、引言 随着信息技术的飞速发展&#xff0c;企业对于提高内部运营效率、降低人力成本的需求日益迫切。在这样的背景下&#xff0c;企微自动化机器人应运而生&#xff0c;以其高效、便捷的特点&#xff0c;迅速成为企业内部的得力助手。本文将深入探讨企微自动化机器人的应用现…