数据结构--队列的顺序实现

数据结构–队列的顺序实现

队列的顺序存储代码定义

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

初始化操作

void InitQueue(SqQueue &Q)
{Q.rear = Q.front = 0;
}

判断队列是否为空

bool QueueEmpty(SqQueue Q)
{return Q.rear == Q.front;
}

入队操作

bool EnQueue(SqQueue &Q, ElemType x)
{if (队列已满)   return false;Q.data[Q.rear] = x;Q.rear = (Q.rear + 1) % MaxSize;return true;
}

用模运算将存储空间在逻辑上变成了
“环状” \color{red}“环状” 环状

这样可以 节约空间 \color{red}节约空间 节约空间

入队代码就变成这个:

bool EnQueue(SqQueue &Q, ElemType x)
{if ((Q.rear + 1) % MaxSize == Q.front)   return false;Q.data[Q.rear] = x;Q.rear = (Q.rear + 1) % MaxSize;return true;
}

我们可以发现这种逻辑会牺牲一个存储空间

解决方法:
方法一:引进队列元素个数

方法二:

记录上一次操作是插入 or 删除

只有删除操作,才可能导致队空
只有插入操作,才可能导致队满

出队操作

bool DeQueue(SqQueue &Q, ElemType &x)
{if (Q.rear == Q.rear)   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;
}

ps:要根据实际的逻辑来书写代码,注意是否需要保证 不牺牲存储空间

知识点回顾与重要考点

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

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

相关文章

C# Excel表列名称

168 Excel表列名称 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入:columnNumber 1 输出:“A”…

ChatGPT 和爬虫有什么区别?

ChatGPT是一种基于人工智能的对话模型,它通过训练大量的文本数据来生成自然语言回复。它可以用于实现智能对话系统,能够理解用户的输入并生成相应的回复。ChatGPT的目标是模拟人类对话,使得对话更加流畅和自然。 而爬虫是一种用于自动化地从…

36.SpringBoot实用篇—运维

目录 一、实用篇—运维。 (1)程序打包与运行(Windows版)。 (2)spring-boot-maven-plugin插件作用。 (3)程序打包与运行(Linux版)。 (4&#…

Vue3对于一个前端来讲意味着什么?

最近很多技术网站,讨论的最多的无非就是Vue3了,大多数都是Composition API和基于Proxy的原理分析。但是今天想着跟大家聊聊,Vue3对于一个低代码平台的前端更深层次意味着什么? 首先,Vue是前端三大主流框架之一&#xf…

jedis使用,操作Redis数据库2

在刚刚ping通的基础上,再来通过jedis连接池连接redis 在resources下创建redis.properties配置文件,在配置文件中写如下内容 # 必配 # Redis服务器地址(域名或IP) redis.host192.168.40.100 # Redis服务器连接端口(Redis默认端口号是6379) redis.port6379 # Redis服务器连接密码…

Redis实战篇(三)

四.分布式锁 4.1.分布式锁概述 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程并行,让程序串行…

Use ELK with Django Log

What is ELK? The ELK Stack is a collection of three open source products: ElasticsearchLogstashKibana When to use ELK? ELK is designed to allow us to take data from any source, in any format, and to search, analyze, visualize data in real time. At t…

Es索引中时间字段是字符串Range查询的正确姿势

文章目录 [toc] 1. 问题2. Es索引的mapping模式2.1 dynamic动态宽松模式(动态映射)2.2 strict严格模式(静态映射) 3. text类型和keyword类型的区别3.1 text类型3.2 keyword类型 4.正确姿势5. 总结 1. 问题 由于之前搞了一个使用fl…

panda3d 模型转换命令复习学习

在此学习了把maya模型转换为panda3d的egg格式; 在Panda3d中转换Maya模型为egg格式并使用pview查看_panda3d egg文件浏览器_bcbobo21cn的博客-CSDN博客 下面继续看一下模型转换命令;列出带 egg 字符串的命令; 先复习一下,可以把m…

数据库—概念学习

文章目录 总览全局数据库数据库管理系统DBA数据库管理员数据库系统的体系结构三层模式两级映像独立性 数据模型数据库技术的产生与发展相关定义 总览全局 整个数据库系统所包含为: 数据库(数据的集合叫做一个库)数据库管理系统数据库应用系…

【azure】office 365邮箱auth2认证之spa的刷新令牌过期后如何处理

参考:https://learn.microsoft.com/zh-cn/azure/active-directory/develop/refresh-tokens 官方对令牌和刷新令牌生命周期的描述 已失效的刷新令牌如何获取新的令牌和刷新令牌 /*** office 365使用失效的刷新令牌和应用程序的相关信息来获取新的访问令牌和刷新令牌…

kafka入门,数据去重(九)

数据传递语义 至少一次:ACK级别设置为-1分区副本大于等于2ISR里应答的最小副本数量大于等于2 最多一次:ACK级别设置为0 总结: At Least Once:可以保证数据不丢失,但是不能保证数据不重复 At Most Once:可以…