数据结构(3.5)——队列的顺序实现

news2024/11/17 22:21:28

队列的顺序实现

#define MaxSize 10//定义队列中元素的最大个数
typedef struct {
	int data[MaxSize];//用静态数组存放队列元素
	int front, rear;//队头指针和队尾指针
} SqQueue;

void testQueue() {
	SqQueue Q;//声明一个队列(顺序存储)
}

队列的初始化操作和判空

//初始化队列
void InitQueue(SqQueue& Q) {
	//初始时 队头、队尾指针指向0
	Q->rear = Q->front = 0;
}
//判断队列是否为空
bool QueueEmpty(SqQueue Q) {
	if (q.rear == Q.front) {//判空条件
		return true;
	}
	else {
		return false;
	}
}

循环队列——入队操作

以下情况我们重点先考虑尾指针指向队尾元素的后一位情况

队列的入队操作只能从队尾入队(插入)

//入队
bool EnQueue(SqQueue& Q, int x) {
	if (Q.rear + 1) % MaxSize == Q.front){//判断队满
		return false;//队满报错
	}
	else {
		Q.data[Q.rear] = x;//新元素插入队尾
		Q.rear = (Q.rear + 1) % MaxSize;//队尾指针加1取模,队尾指针后移
		return true;
	}
}

该函数中的

		Q.rear = (Q.rear + 1) % MaxSize;//队尾指针加1取模

这一行代码实则是将一个顺序队列变成了循环队列

循环队列——入队操作

//出队(删除一个队头元素,并用x返回)
bool DeQueue(SqQueue& Q, int& x) {
	if (Q.rear == Q.front) {//判断队空
		return false;//队空则报错
	}
	else {
		x = Q.data[Q.front];
		Q.front = (Q.front + 1) & MaxSize;//队头指针后移
		return true;
	}
}

循环队列——读取队头操作

读取队头的操作和出队操作很类似,只是将表格引用符号去掉,并且不要让队头指针往后移就行

//获得队头元素的值,用x返回
bool GetHead(SqQueue Q, int& x) {
	if (Q.rear == Q.front) {//判断队空
		return false;//队空则报错
	}
	else {
		x = Q.data[Q.front];
		return true;
	}
}
void testQueue() {
	SqQueue Q;//声明一个队列(顺序存储)
}

计算队列元素个数:

(rear+MaxSize-front)%MaxSize

方法二:增加一个辅助变量size判断空判满

由于刚刚第一种方法判空和判满会造成一些不必要的内存空间浪费,于是我们在队列中添加一个size来表示队列的长度,并且记录队列的入队和出队变化

typedef struct {
	int data[MaxSize];//用静态数组存放队列元素
	int front,rear;//队头指针和队尾指针
	int size;//队列当前长度
} SqQueue;
//初始化队列
void InitQueue(SqQueue& Q) {
	//初始时 队头、队尾指针指向0
	Q.rear = Q.front = 0;
	Q.size=0;
}

方法三:增加一个辅助变量tag判断空判满 

#define MaxSize 10//定义队列中元素的最大个数
typedef struct {
	int data[MaxSize];//用静态数组存放队列元素
	int front,rear;//队头指针和队尾指针
	int tag;//最近进行的是删除为0/插入为1
} SqQueue;

例子:

// 初始化队列
void InitQueue(SqQueue *Q) {
	Q->front = Q->rear = 0;
	Q->tag = 0;
}

// 判断队列是否为空
int IsEmpty(SqQueue Q) {
	return Q.front == Q.rear && Q.tag == 0;
}

// 判断队列是否已满
int IsFull(SqQueue Q) {
	return Q.front == Q.rear && Q.tag == 1;
}

// 入队操作
int EnQueue(SqQueue *Q, int x) {
	if (IsFull(*Q)) {
		return 0; // 队列已满,入队失败
	}
	Q->data[Q->rear] = x;
	Q->rear = (Q->rear + 1) % MaxSize; // 循环使用数组
	Q->tag = 1;
	return 1; // 入队成功
}

// 出队操作
int DeQueue(SqQueue *Q, int *x) {
	if (IsEmpty(*Q)) {
		return 0; // 队列为空,出队失败
	}
	*x = Q->data[Q->front];
	Q->front = (Q->front + 1) % MaxSize; // 循环使用数组
	Q->tag = 0;
	return 1; // 出队成功
}

 总结:

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

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

相关文章

Vue异步操作发送AJAX请求

5. Vue异步操作 1 axios介绍 在Vue中发送异步请求,本质上还是AJAX。我们可以使用axios这个插件来简化操作! 使用步骤 1.引入axios核心js文件。 2.调用axios对象的方法来发起异步请求。 3.调用axios对象的方法来处理响应的数据。 axios常用方法 代码…

centos执行yum相关命令报错的可能原因

文章目录 1. 执行yum命令是报下面一大帕拉2. 安装某个包报错,找不到这个包 1. 执行yum命令是报下面一大帕拉 最后一行报错,在repo文件中找不到空baseurl:xxx / x86_64 执行这行命令把这个找不到的 xxx 禁掉即可sudo yum-config-manager --di…

关于Unity粒子(2D序列帧粒子)的旋转、StartRotation值用脚本怎么动态设置

今天要用粒子做一个拖尾效果。由于对象的移动可以向任何方向,所以作为拖尾的粒子要根据方向做相应的旋转。 1.没有旋转的情况(物体向下移动)时,默认是下面这样的。 粒子发射器的形状是一个向上的长方形,粒子的移动方向…

[FreeRTOS 功能应用] 互斥量 功能应用

文章目录 一、基础知识点二、代码讲解三、结果演示四、代码下载 一、基础知识点 [FreeRTOS 基础知识] 互斥量 概念 [FreeRTOS 内部实现] 互斥量 本实验是基于STM32F103开发移植FreeRTOS实时操作系统,互斥量实战操作。 使用工具:Keil、串口工具 二、代码…

Android增量更新----java版

一、背景 开发过程中,随着apk包越来越大,全量更新会使得耗时,同时浪费流量,为了节省时间,使用增量更新解决。网上很多文章都不是很清楚,没有手把手教学,使得很多初学者,摸不着头脑&a…

【LabVIEW学习篇 - 2】:LabVIEW的编程特点

文章目录 LabVIEW的编程特点图形编程天然并行运行基于数据流运行 LabVIEW的编程特点 图形编程 LabVIEW使用图形化的图形化编程语言(G语言),用户通过在程序框图中拖放和连接各种节点(Nodes)来编写程序。每个节点代表一…

C#Modbus通信

目录 1,辅助工具。 2,初识Modbus。 3,基于ModbusRTU的通信。 3.1,RTU与ASCII模式区别 3.2,Modbus存储区 3.3,报文格式 3.4,异常代码 3.5,详细文档连接 。 3.6,代…

mupdf加载PDF显示中文乱码

现象 加载PDF显示乱码,提示非嵌入字体 non-embedded font using identity encoding调式 在pdf-font.c中加载字体 调试源码发现pdf文档的字体名字居然是GBK,估计又是哪个windows下写的pdf生成工具生成pdf 字体方法: static pdf_font_desc * load_cid…

软通动力子公司鸿湖万联最新成果SwanLink AI亮相世界人工智能大会

7月4日,2024世界人工智能大会暨人工智能全球治理高级别会议(WAIC 2024)在上海拉开帷幕,软通动力董事长兼首席执行官刘天文受邀出席开幕式。其间,软通动力携子公司鸿湖万联深度参与到大会各项活动中,并全面展…

详解AT_dp_l Deque(区间动态规划)

题目 思路 考虑模拟博弈过程。 题目可以看成:先手希望X - Y最大,后手希望X - Y最小。 显然游戏过程中剩下的数必然是连续的一段。设 dp[i,j]​ 表示剩下下标为 [i,j] 的数时,先手(并非当前的先手而是开始时的先手,下同&#xf…

12 Dockerfile详解

目录 1. Dockerfile 2. Dockerfile构建过程 2.1. Dockerfile编写规则: 2.2. Docker执行Dockerfile的大致流程 2.3. 总结 3. Dockerfile指令 3.1. FROM 3.2. MAINTAINER 3.3. RUN 3.4. EXPOSE 3.5. WORKDIR 3.6. USER 3.7. ENV 3.8. VOLUME 3.9. ADD …

CVE-2023-30212(xss漏洞)

简介 OURPHP版本<7.2.0存在XSS漏洞&#xff0c;攻击路径为/client/manage/ourphp_out.php。 过程 打开靶场 访问攻击路径/client/manage/ourphp_out.php 得到flag{354c7c41-cc23-4de5-be73-79cbbf384aba}

Hasleo Backup Suite 一款专为Windows操作系统设计的免费数据备份与恢复软件,支持备份、恢复和克隆功能

数据安全是每位计算机用户都关心的重要问题。在日常使用中&#xff0c;我们经常面临文件丢失、系统崩溃或病毒感染等风险。为了解决这些问题&#xff0c;我们需要可靠且高效的数据备份与恢复工具。本文将介绍一款优秀的备份软件&#xff1a;Hasleo Backup Suite&#xff0c;它为…

Python数据分析案例49——基于机器学习的垃圾邮件分类系统构建(朴素贝叶斯,支持向量机)

案例背景 trec06c是非常经典的邮件分类的数据&#xff0c;还是难能可贵的中文数据集。 这个数据集从一堆txt压缩包里面提取出来整理为excel文件还真不容不易&#xff0c;肯定要做一下文本分类。 虽然现在文本分类基本都是深度学习了&#xff0c;但是传统的机器学习也能做。本案…

Python字符串处理常用的30种操作

我们平时编写代码时&#xff0c;经常需要对字符串进行处理&#xff0c;本文详细介绍Python处理字符串常用的30种操作&#xff0c;并给出了对应的代码。 分割 使用split()方法将字符串按照指定的分隔符进行分割。 s "Hello,World" result s.split(","…

解决分布式环境下session共享问题

在分布式环境下&#xff0c;session会存在两个问题 第一个问题:不同域名下&#xff0c;浏览器存储的jsessionid是没有存储的。比如登录时认证服务auth.gulimall.com存储了session&#xff0c;但是搜索服务search.gulimall.com是没有这个session的&#xff1b; 第二个问题&…

hdu物联网硬件实验2 GPIO亮灯

学院 班级 学号 姓名 日期 成绩 实验题目 GPIO亮灯 实验目的 点亮三个灯闪烁频率为一秒 硬件原理 无 关键代码及注释 const int ledPin1 GREEN_LED; // the number of the LED pin const int ledPin2 YELLOW_LED; const int ledPin3 RED…

E4.【C语言】练习:while和getchar的理解

#include <stdio.h> int main() {int ch 0;while ((ch getchar()) ! EOF){if (ch < 0 || ch>9)continue;putchar(ch);}return 0; } 理解上述代码 0-->48 9-->57 if行判断是否为数字&#xff0c;打印数字&#xff0c;不打印非数字

干冰运输与存储中的温度监测:确保药品安全与合规性

在制药行业&#xff0c;干冰对于运输和储存对温度敏感的药品&#xff0c;如原料药API、疫苗、冻干物质和人体组织样本等至关重要。虹科ELPRO LIBERO系列干冰温度记录仪&#xff0c;能够为您提供专业的解决方案&#xff0c;定期监测和记录干冰运输和存储过程中的温度&#xff0c…

字节码编程javassist之定义各种属性

写在前面 源码 。 本文看下如何使用javassist来定义属性。 1&#xff1a;程序 package com.dahuyou.javassist.generateFieldAndMethod;import javassist.*;import java.lang.reflect.Method;public class JustDoIt111 {public static void main(String[] args) throws Exce…