数据结构与算法(5)队列的基本操作

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int ElemType;
#define MaxSize 10//队列的定义
typedef struct SqQueue
{ElemType data[MaxSize];int front, rear;//front为头指针,rear为尾指针。这里并不是真正的“指针”
}SqQueue;SqQueue q;
void InitQueue(SqQueue* q);//初始化队列
bool EnQueue(SqQueue* q, ElemType x);//入队操作
bool PopQueue(SqQueue* q);//出队操作
bool Gethead(SqQueue* q);//取队头元素
void PrintQueue(SqQueue* q);//打印队列元素void InitQueue(SqQueue* q)//初始化队列
{q->front = q->rear=0;printf("队列初始化成功\n");
}bool EnQueue(SqQueue* q,ElemType x)//入队操作
{if ((q->rear + 1) % MaxSize == q->front)printf("队列已满,无法完成入队操作\n");else{q->data[q->rear] = x;q->rear = ((q->rear) + 1) % MaxSize;//因为是循环队列,所以采用这种方式使队尾指针后移printf("入队成功\n");}
}bool PopQueue(SqQueue* q) //出队操作
{if (q->rear == q->front){printf("该队列为空,无法完成出队操作\n");}else {int x;x = q->data[q->front];q->front = ((q->front) + 1) % MaxSize;//使队头指针后移printf("出队成功\n");}
}bool Gethead(SqQueue* q)//取队头元素
{if (q->rear == q->front){printf("该队列为空,无法完成出队操作\n");}else{int x;x = q->data[q->front];printf("队头元素为%d",x);}
}void PrintQueue(SqQueue q)//打印队列元素
{while (q.front != q.rear){printf("%d ", q.data[q.front]);q.front = (q.front + 1) % MaxSize;}
}

所述代码都是基于队尾指针指向队尾元素后一个位置实现的  

队列:

1.只能从一段进行插入,另一端进行删除

2.注意循环队列q->rear=((q->rear)+1)%MaxSize是使指针后移的操作

 判断队列已满/为空的操作

方法一:这种判空方式就是上面代码所用的,缺点是会牺牲一个存储单元(因为我们是用rear指针的下一个位置是front来判断队列是否已满) 

方法二:定义一个变量来记录队列的长度,入队成功size++,出队size--,

此时队满的判断:size==MaxSize;

 方法三:定义一个tag变量来记录最近一次执行的是插入还是删除操作

tag=1表示是插入操作

tag=0表示是删除操作

若rear==front && tag==1 则队列已满

若rear==front && tag==0 则队列为空

补充:

求队列元素的个数

int length(SqQueue L)
{return ((rear+MaxSize-front)%MaxSize);
}

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

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

相关文章

嵌入式数据库SQLite 3配置使用详细笔记教程

0、惨痛教训 随着管理开发的项目体积越来越庞大&#xff0c;产品系统涉及的数据量也越来越多&#xff0c;并且伴随着项目不久就要交付给甲方了。如果项目的数据信息没有被妥善管理&#xff0c;后期设备的运行状态、操作状况等数据流信息不能被溯源&#xff0c;当出现了一些特殊…

conll-2012-formatted-ontonotes-5.0中文数据格式说明

CoNLL-2012 数据格式是用于自然语言处理任务的一种常见格式&#xff0c;特别是在命名实体识别、词性标注、句法分析和语义角色标注等领域。这种格式在 CoNLL-2012 共享任务中被广泛使用&#xff0c;该任务主要集中在语义角色标注上。 CoNLL-2012 数据格式通常包括多列&#xf…

python:画饼图

我现在因工作需要在写一篇中文文章&#xff0c;领导要我用python处理数据和画图&#xff0c;那我也刚好学习一下python画图。 import matplotlib.pyplot as plt # 饼图数据 labels [A, B, C, D] sizes [15, 30, 45, 10] # 每个部分的大小 # 绘制饼图 plt.figure(figsize(6,…

Python项目开发实战:俄罗斯方块游戏(案例教程)

一、项目概述 俄罗斯方块(Tetris)是一款经典的益智游戏,它以其简单易懂的游戏规则和丰富的变化吸引了无数玩家。本项目旨在使用Python编程语言及其图形库Pygame来开发一个基础的俄罗斯方块游戏。通过本项目,我们将了解游戏开发的基本流程,掌握Python和Pygame的基本用法,并…

MySQL sql_mode引发的异常

背景介绍 项目代码在多个环境运行&#xff0c;其中一个环境有问题。一直报错sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (3065, "Expression #2 of ORDER BY clause is not in SELECT list, references column xxx which is not in SELECT list; this i…

紧跟生成式AI暴雨发布新时代推理服务器

近日&#xff0c;暴雨发布最新训推一体AI服务器&#xff0c;以大容量内存和灵活的高速互连选项满足各种AI应用场景&#xff0c;最大可能支持扩展插槽&#xff0c;从而大幅提升智能算力性能&#xff0c;以最优的性能和成本为企业的模型训练推理落地应用提供更好的通用算力。 AIG…

软考系列必过资料分享-系统架构师-系统分析师-信息系统项目管理师

建议,写在前面 知识点是公用的,原则上不分新旧。每年会有少部分的题目切合当前时间段&#xff08;也是通过旧的知识演变的&#xff09; 信息系统项目管理师证书 系统架构师证书 系统分析师证书 资料分享 关注公众号 回复 信息系统项目管理师资料 即可获取信息系统项目管理师资…

【RAG 论文】Dense X 检索:将“命题”作为检索粒度

论文&#xff1a;Dense X Retrieval: What Retrieval Granularity Should We Use? ⭐⭐⭐⭐ Code: github.com/ct123098/factoid-wiki 文章目录 一、论文速读二、命题&#xff08;Proposition&#xff09;三、FactoidWiki四、实验及分析4.1 Passage Retrieval 任务4.2 Open-Do…

数据结构-线性表-链表-2.3-7

设在一个带头结点的单链表中所有元素的数据值无序&#xff0c;试编写一个函数&#xff0c;删除表中所有介于给定的两个值&#xff08;作为函数参数给出&#xff09;之间的元素的元素&#xff08;若存在&#xff09;。 无序链表&#xff0c;逐个结点进行检查&#xff0c;执行删…

VSCode-vue3.0-安装与配置-export default简单例子

文章目录 1.下载VSCode2.修改语言为中文3.辅助插件列表4.vue3模板文件简单例子5.总结 1.下载VSCode 从官网下载VSCode&#xff0c;并按下一步安装成功。 2.修改语言为中文 点击确认修改&#xff0c;如下图所示&#xff1a; 或者打开命令面板&#xff1a;输入Configure Displ…

党建教育vr虚拟现实展厅真正实现了绿色、低碳的展示方式

在数字化浪潮席卷的今天&#xff0c;传统企业门户官网已难以满足企业日益增长的展示需求。面对这一挑战&#xff0c;北京华锐凭借深厚的行业经验和领先的技术实力&#xff0c;为您提供全新的元宇宙虚拟展厅制作服务&#xff0c;助您轻松打破现实与虚拟的界限&#xff0c;开启企…

如何让vim支持python3

首先删除旧的vim。 sudo apt-get remove vim //输入re按下tab直接显示remove sudo apt-get remove vim-runtime sudo apt-get remove vim -tiny sudo apt-get remove vim-common 然后下载vim8源码&#xff1a; git clone https://github.com/vim/vim.git 进行编译安装…

【NodeMCU实时天气时钟温湿度项目 5】获取关于城市天气实况和天气预报的JSON信息(心知天气版)

| 今天是第五专题内容&#xff0c;主要是介绍如何从心知天气官网&#xff0c;获取包含当前天气实况和未来 3 天天气预报的JSON数据信息。 在学习获取及显示天气信息前&#xff0c;我们务必要对JSON数据格式有个深入的了解。 如您需要了解其它专题的内容&#xf…

C语言----杨辉三角

各位看官们好。学习到这里想必大家应该对C语言的了解也是很深刻的了吧。但是我们也不能忘记我们一起学习的知识啊。在我们以前学习C语言的时候我想大家应该都听说过杨辉三角吧。虽然我们把其中的规律找到那么这个代码就简单很多了。那么接下里我们就来讲讲杨辉三角。 首先我们先…

UltralSO制作启动盘时报错:磁盘/映像容量太小解决办法

UltralSO制作启动盘时报错&#xff1a;磁盘/映像容量太小解决办法 发现网上随便下载的UltralSO制作启动盘时报错&#xff1a;磁盘/映像容量太小&#xff0c;导致制作启动盘出错 解决方案&#xff1a; 去这个地址下载&#xff1a;https://cn.ultraiso.net/xiazai.html 下载正版…

sql 注入 1

当前在email表 security库 查到user表 1、第一步&#xff0c;知道对方goods表有几列&#xff08;email 2 列 good 三列&#xff0c;查的时候列必须得一样才可以查&#xff0c;所以创建个临时表&#xff0c;select 123 &#xff09; 但是你无法知道对方goods表有多少列 用order …

场外期权个股怎么对冲?

今天期权懂带你了解场外期权个股怎么对冲&#xff1f;场外个股期权是一种在非交易所市场进行的期权交易&#xff0c;它允许投资者针对特定的股票获得未来买入或卖出的权利。 场外期权个股怎么对冲&#xff1f; 持有相反方向的期权&#xff1a;这是最直接的对冲方法&#xff0c…

Elasticsearch中的三种分页策略深度解析:原理、使用及对比

码到三十五 &#xff1a; 个人主页 在Elasticsearch中&#xff0c;分页是查询操作中不可或缺的一部分。随着数据量的增长&#xff0c;如何高效地分页查询数据急需需要面对的问题。Elasticsearch提供了三种主要的分页方式&#xff1a;from size、scroll和search_after。下面详细…

STM32系统架构

以下是STM32系统架构中的各个重要组件和功能&#xff1a; 组件描述Cortex-M内核ARM Cortex-M系列内核&#xff0c;如M0、M0、M3、M4、M7等Flash存储器存储程序代码和数据SRAM存储程序运行时数据和堆栈外设接口GPIO、SPI、I2C、UART、TIM、ADC、DAC、USB、CAN、Ethernet等时钟和…

大模型微调实战之强化学习 贝尔曼方程及价值函数(五)

大模型微调实战之强化学习 贝尔曼方程及价值函数&#xff08;五&#xff09; 现在&#xff0c; 看一下状态-动作值函数的示意图&#xff1a; 这个图表示假设首先采取一些行动(a)。因此&#xff0c;由于动作&#xff08;a&#xff09;&#xff0c;代理可能会被环境转换到这些状…