【算法设计题】基于front、rear和count的循环队列初始化、入队和出队操作,第6题(C/C++)

news2025/2/22 19:44:57

目录

第3题 基于front、rear和count的循环队列初始化、入队和出队操作

得分点(必背)

题解:基于front、rear和count的循环队列初始化、入队和出队操作

数据结构定义

代码解答

详细解释

1. 循环队列初始化

2. 循环队列入队

3. 循环队列出队

示例

1、初始化队列

2、入队操作

3、出队操作


🌈 嗨,我是命运之光!

🌌 2024,每日百字,记录时光,感谢有你,携手前行~

🚀 携手启航,我们一同深入未知的领域,挖掘潜能,让每一步成长都充满意义。


第6题 基于front、rear和count的循环队列初始化、入队和出队操作

假设循环队列中设置front、rear和count分别指示队头元素的位置、队尾元素的位置和队中元素的个数编写算法,实现基于此结构的循环队列的初始化、入队、出队操作

得分点(必背)

/*--------以下卷子上得分--------*/
// 循环队列初始化(得分)
void InitQueue(SqQueue *Q) {
    Q->front = Q->rear = 0;
    Q->count = 0;
}
// 循环队列入队(得分)
int EnQueue(SqQueue &Q, int x) {
    if (Q.count == MAXSIZE) {//队列满
        return FALSE;
    }
    Q.element[Q.rear] = x;
    Q.rear = (Q.rear + 1) % MAXSIZE;
    Q.count++;
    return TRUE;
 }
// 循环队列出队(得分)
int DeQueue(SqQueue &Q, int &x) {
    if (Q.count == 0) {//队列空
        return FALSE;
    }
    x = Q.element[Q.front];
    Q.front = (Q.front + 1) % MAXSIZE;
    Q.count--;
    return TRUE;
 }
/*--------以上卷子上得分--------*/

题解:基于front、rear和count的循环队列初始化、入队和出队操作

在这个题目中,我们需要实现循环队列的初始化、入队和出队操作。循环队列使用数组实现,front和rear分别指示队头和队尾元素的位置,count表示队列中元素的个数。以下是代码及详细解释。

数据结构定义

假设循环队列的数据结构定义如下:

#define MAXSIZE 100 // 队列的最大长度
#define TRUE 1
#define FALSE 0

typedef struct {
    int element[MAXSIZE]; // 存储队列元素的数组
    int front; // 队头指针
    int rear; // 队尾指针
    int count; // 队列中元素的个数
} SqQueue;
代码解答
/*--------以下卷子上得分--------*/
// 循环队列初始化(得分)
void InitQueue(SqQueue *Q) {
    Q->front = Q->rear = 0;
    Q->count = 0;
}

// 循环队列入队(得分)
int EnQueue(SqQueue &Q, int x) {
    if (Q.count == MAXSIZE) {//队列满
        return FALSE;
    }
    Q.element[Q.rear] = x;
    Q.rear = (Q.rear + 1) % MAXSIZE;
    Q.count++;
    return TRUE;
}

// 循环队列出队(得分)
int DeQueue(SqQueue &Q, int &x) {
    if (Q.count == 0) {//队列空
        return FALSE;
    }
    x = Q.element[Q.front];
    Q.front = (Q.front + 1) % MAXSIZE;
    Q.count--;
    return TRUE;
}
/*--------以上卷子上得分--------*/
详细解释
1. 循环队列初始化
void InitQueue(SqQueue *Q) {
    Q->front = Q->rear = 0;
    Q->count = 0;
}
  • InitQueue 函数用于初始化循环队列。
  • Q 是指向循环队列结构体 SqQueue 的指针。
  • Q->frontQ->rear 初始化为0,表示队列的起始位置。
  • Q->count 初始化为0,表示队列中当前没有元素。
2. 循环队列入队
int EnQueue(SqQueue &Q, int x) {
    if (Q.count == MAXSIZE) {//队列满
        return FALSE;
    }
    Q.element[Q.rear] = x;
    Q.rear = (Q.rear + 1) % MAXSIZE;
    Q.count++;
    return TRUE;
}
  • EnQueue 函数用于将元素 x 入队。
  • Q 是循环队列结构体的引用。
  • 首先检查队列是否已满(Q.count == MAXSIZE),如果已满,返回 FALSE
  • 如果队列未满,将元素 x 存入 Q.element[Q.rear] 位置。
  • 更新 Q.rear,使其指向下一个位置 (Q.rear + 1) % MAXSIZE,这是循环队列的关键操作,使 rear 在达到数组末尾时能够循环回到数组开头。
  • 更新 Q.count,元素个数加1。
  • 返回 TRUE,表示入队成功。
3. 循环队列出队
int DeQueue(SqQueue &Q, int &x) {
    if (Q.count == 0) {//队列空
        return FALSE;
    }
    x = Q.element[Q.front];
    Q.front = (Q.front + 1) % MAXSIZE;
    Q.count--;
    return TRUE;
}
  • DeQueue 函数用于将队列中的元素出队。
  • Q 是循环队列结构体的引用。
  • 首先检查队列是否为空(Q.count == 0),如果为空,返回 FALSE
  • 如果队列不为空,将 Q.element[Q.front] 的值赋给 x,即出队元素。
  • 更新 Q.front,使其指向下一个位置 (Q.front + 1) % MAXSIZE,这是循环队列的关键操作,使 front 在达到数组末尾时能够循环回到数组开头。
  • 更新 Q.count,元素个数减1。
  • 返回 TRUE,表示出队成功。
示例

假设有一个循环队列 Q

1、初始化队列
SqQueue Q;
InitQueue(&Q);

此时,Q.front = 0, Q.rear = 0, Q.count = 0

2、入队操作
EnQueue(Q, 10);
EnQueue(Q, 20);
EnQueue(Q, 30);

执行上述操作后,队列 Q 中有三个元素,Q.element = [10, 20, 30, ...]Q.front = 0Q.rear = 3Q.count = 3

3、出队操作
int x;
DeQueue(Q, x); // x = 10
DeQueue(Q, x); // x = 20

 嗨,我是命运之光。如果你觉得我的分享有价值,不妨通过以下方式表达你的支持:👍 点赞来表达你的喜爱,📁 关注以获取我的最新消息,💬 评论与我交流你的见解。我会继续努力,为你带来更多精彩和实用的内容。

点击这里👉 ,获取最新动态,⚡️ 让信息传递更加迅速。

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

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

相关文章

分库分表的使用场景和中间件

文章目录 一、为什么要分库分表?分库分表的使用场景?二、分库分表常用中间件1、Cobar2、TDDL3、Atlas4、Sharding-jdbc5、Mycat6、总结 一、为什么要分库分表?分库分表的使用场景? 场景1:注册用户就 20 万&#xff0c…

1.4 C 程序的编译过程与 CLion 调试技巧

目录 1 程序的编译过程 1.1 编写源代码 1.2 预处理(Preprocessing) 1.3 编译(Compilation) 1.4 汇编(Assembly) 1.5 链接(Linking) 1.6 执行 2 编译过程的输入输出文件概览 …

7-1 深度学习硬件:CPU和GPU

L 3 L3 L3、 L 2 L2 L2、 L 1 L1 L1为cache,数据只有进入寄存器的时候,才能开始运算。 (此图错误,一个矩阵应该是按行存储的!) GPU的核要远远多于CPU,从而TFLOPS,GPU每秒能做的…

Vue3.0与Echarts5

1.课程介绍与目标 有句话说的好“一图胜千言”,在我们开发的领域就是说,在对于复杂难懂且体量庞大的数据展示上面而言,图表的信息量要大得多,这也是我们为什么要谈数据可视化。https://notes.xiyankt.com/#/echarts/echarts​ stu…

深入理解 Apollo Client 的缓存策略

前言 上一篇文章:Nextjs 使用 graphql,并且接入多个节点 介绍了如何接入 graphql,并且使用 Apollo client 来请求和操作数据。后面深入了解了一下其缓存策略,想着有必要整理出来,作为后续学习。有任何问题还请批评指正…

八股之Java基础

注:本文部分内容源自Java 面试指南 | JavaGuide 一、基础概念与常识 1.JVM、JDK、JRE JVM:Java Virtual Machine,虚拟机,运行Java字节码,实现Java的平台无关性 JDK:Java Development Kit,Ja…

PwnLab: init-文件包含、shell反弹、提权--靶机渗透思路讲解

Vulnhub靶机链接回【PwnLab】 首页有一个登录框 image-20240807124822770 他没有验证码,我们试试暴力破解 image-20240807122743025 开始爆破了,全部失败,哈哈哈 image-20240807122851001 nmap全端口扫描试试 image-20240807131408315 有…

无法访问jakarta.servlet.http.HttpServletRequest

1、问题 无法访问jakarta.servlet.http.HttpServletRequest2、原因 JDK1.8升级到高版本后&#xff0c;需要手动引入jakarta.servlet-api 3、解决 增加依赖 <dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</ar…

6.2.面向对象技术-UML图

UML UML事物关系依赖关联聚合组合 泛化实现 类图对象图用例图序列图通信图状态图活动图构件图部署图练习题 UML 上午选择题3-4分&#xff0c;下午案例分析必考 UML是统一建模语言&#xff0c;和程序设计语言并无关系。 UML三个要素&#xff1a;UML的基本构造块、支配这些构造…

代码随想录算法训练营第二十一天 | 77. 组合, 216.组合总和III , 17.电话号码的字母组合

目录 77. 组合 思路 回溯法三部曲 方法一&#xff1a; 回溯未剪枝 方法二&#xff1a;回溯剪枝 心得收获 216.组合总和III 思路 方法一&#xff1a;回溯-没有使用sum来统计path里元素的总和 方法二&#xff1a;回溯&#xff0c;使用sum来保存当前路径上的总和 心得…

如何应用OceanBase 的实时SQL诊断,解决AP场景下的痛点

随着数据量的快速增长与用户需求的变化&#xff0c;数据库的管理与优化工作日益凸显其重要性。作为DBA及开发者&#xff0c;您是否曾面临以下挑战&#xff1a; ○ 分析场景下&#xff0c;在处理大规模数据的且耗时较长的查询是&#xff0c;常涉及海量数据的处理及复杂的计算&…

Python 设计模式之工厂函数模式

文章目录 案例基本案例逐渐复杂的案例 问题回顾什么是工厂模式&#xff1f;为什么会用到工厂函数模式&#xff1f;工厂函数模式和抽象工厂模式有什么关系&#xff1f; 工厂函数模式是一种创建型设计模式&#xff0c;抛出问题&#xff1a; 什么是工厂函数模式&#xff1f;为什么…

Vue3学习笔记第一天

MVVM Vue是一种用于构建用户界面的JavaScript框架。MVVM 是Vue采用的一种软件架构模式&#xff0c;用于构建交互式的用户界面。它的全称是 Model-View-ViewModel&#xff0c;这三个部分分别代表了应用程序的不同层次和角色&#xff1a; Model&#xff08;模型&#xff09;&…

【ARM】v8架构programmer guide(3)_ARMv8的寄存器

目录 4.ARMv8 registers 4.1 AArch64 特殊寄存器 4.1.1 Zero register 4.1.2 Stack pointer &#xff08;SP) 4.1.3 Program Counter &#xff08;PC) 4.1.4 Exception Link Register(ELR) 4.1.5 Saved Process Status Register &#xff08;SPSR&#xff09; 4.2 Proc…

性能测试基础概念

前言&#x1f440;~ 上一章我们介绍了单元测试Junit的使用&#xff0c;今天我们来讲解一下性能测试的一些基础概念为后面我们进行性能测试做铺垫 什么是性能测试&#xff1f; 性能测试和功能测试有什么区别&#xff1f; 影响一个软件性能因素有哪些&#xff1f; 为什么要进…

循环神经网络和自然语言处理一

目录 一.分词 1.分词工具 2.分词的方法 3.N-gram表示方法 二.向量化 1.one-hot编码 2.word embedding 3.word embedding API 4.数据形状改变 既然是自然语言&#xff0c;那么就有字&#xff0c;词&#xff0c;句了 一.分词 1.分词工具 tokenization&#xff0c;jie…

Outlook Pst文件大小最大多大?如何分开缩减?

簡介 預設情況下&#xff0c;personal Folders (.pst) 和離線 Outlook Data File (.ost) 檔案在 Microsoft Outlook 2010 和 Outlook 2013 中為 Unicode 格式。 .pst 和 .ost 檔案的整體大小有 50 GB 的預先設定限制。 此限制大於 2007 和 Outlook 2003 Outlook Unicode .pst …

零基础5分钟上手亚马逊云科技AWS核心云开发/云架构知识 - 成本分析篇

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;让大家零基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我将每天介绍一个基于亚马逊云科…

数据结构 - 相邻节点迭代器

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、相邻节…

nuxt3实战:完整的 nuxt3 + vue3 项目创建与useFetch请求封装

一. 安装 pnpm dlx nuxilatest init <project-name>// ornpx nuxilatest init <project-name>如遇到报错 手动安装&#xff1a; 浏览器访问报错https请求地址&#xff1a; 点击tar(项目初始文件的下载地址)对应地址,下载starter-3.tar.gz 包到本地 本地创建项…