【数据结构】循环队列的实现(附带详细注释)

2023-11-06

前言

  1. 《数据结构系列首页》是数据结构系列文章的首页,其中会逐步更新各种数据结构的实现,有兴趣的选手可以一看。
  2. 首页中不仅有各种数据结构的实现,还有学习数据结构必备的基础知识,如果有选手觉得自己的基础不太牢固,可以先将搞定基础知识,之后再攻克数据结构这一部分的内容。
  3. 由于我也是刚开始学习数据结构这门课程,所以如果发现文章中存在错误,希望大家可以直接指出,我将第一时间修改
  4. 更多数据结构的实现请见《数据结构系列文章》,我会在学习完新的数据结构后不断更新其中的内容。

开场白

队列(queue)是只允许在一端进行插入操作,在另一端进行删除操作的线性表,是一种先进先出(First In First Out)的线性表,简称FIFO结构。允许插入的一端成为队尾,允许删除的一端为队头。需要注意的是,循环队列的队头下标始终为队头元素的下标,但队尾下标始终为队尾元素的下一个元素的下标;其次,长度为n的循环队列可以存放的元素个数始终为n-1,空余一个位置不放元素是为了区别队列空和队列满。本篇采用动态一维数组实现了队列的循环存储,同时实现了循环队列的一些操作。

具体实现

头文件
#include <stdio.h>	// printf、scanf函数所在的头文件
#include <stdlib.h> // exit函数所在的头文件
#include <malloc.h>	// calloc、free函数所在的头文件
#include <math.h>	// 宏OVERFLOW所在的头文件,OVERFLOW的值为3

// 按照严蔚敏老师书中的编程习惯,定义如下4个宏
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OK 1

typedef int Status;		// Status是函数返回值的类型,其返回的是函数执行结果的状态
typedef int ElemType;	// ElemType是元素的数据类型,想要整体改变元素的数据类型只需改变ElemType前的数据类型即可

// 定义循环队列结构
#define QUEUE_MAX_SIZE 5 // 定义队列的长度(实际长度为4,规定长度为n的循环队列的可用长度为n-1)
typedef struct CyclicQueue
{
   
	ElemType* base; // 动态一位数组的基地址
	int front; // 队头元素的下标
	int rear;  // 队尾元素下一个元素的下标
}QUEUE; // QUEUE 等同于 struct CyclicQueue
函数声明
void init_queue(QUEUE&);
void destroy_queue(QUEUE&);
void clear_queue(QUEUE&);
Status is_empty(QUEUE&);
Status is_full(QUEUE&);
Status get_head_element(QUEUE&, ElemType&);
Status 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构】循环队列的实现(附带详细注释) 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 按成员序列化

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le

随机推荐

  • .NET中的视图和过滤器 (DefaultView和RowFilter)

    NET中的视图和过滤器 DefaultView和RowFilter ADO NET中有一层对象 用来创建任意数据源的抽象模型 其中包括DataSet DataTable DataRow DataView DataRelation等等 所有这
  • Python3的一些基础语法介绍和理解

    作者 心叶时间 2018 04 23 22 18 此处长期维护一些对帮助快速使用python3的一些基础语法 方便日常算法练习使用 控制语法 break 语句可以跳出 for 和 while 的循环体 如果你从 for 或 while 循环
  • 【华为OD机试python】评论转换输出【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 在一个博客网站上 每篇博客都有评论 每一条评论都是一个非空英文字母字符串 评论具有树状结构 除了根评论外 每个评论都有一个父评论 当评论保存时 使用以下格式 首先是评
  • 手撕双链表

    gt 作者简介 旧言 目前大一 现在学习Java c c Python等 gt 座右铭 松树千年终是朽 槿花一日自为荣 gt 望小伙伴们点赞 收藏 加关注哟 前言 前面我们已经学习了顺序表和单链表 顺序表可以存储动态的数据 但是一旦元素过少
  • CMake 入门级别语法

    CMake 入门级别语法 一 简单实例 开发环境Windows10平台 已经安装了CMake工具 和WinMG32编译器 当前文件夹下文件结构 编译的源文件 cgic c cgictest c 编译的头文件 cgic h 然后编写一个名为C
  • 深入解析sprintf格式化字符串漏洞

    深入解析sprintf格式化字符串漏洞 0x00 前言 从相遇到相识 从相识到相知 不过你真的懂ta吗 这次故事的主角是PHP中的格式化函数sprintf 0x01 sprintf 讲解 首先我们先了解sprintf 函数 sprintf
  • 再见,Navicat!

    DataGrip使用入门 最近看到一款数据库客户端工具 DataGrip 是大名鼎鼎的JetBrains公司出品的 就是那个出品Intellij IDEA的公司 DataGrip是一款数据库管理客户端工具 方便连接到数据库服务器 执行sql
  • 原生Android何去何从

    lt 原生Android何去何从 gt By 我承认永不变 一 Android发展方向 1 跨平台开发 科技日益发展 未来的世界 不可估量 在此发表一下我的意见 虽然很不想承认 但是却不得不承认跨平台开发会成为主流 跨平台应用的优点显而易见
  • 华为OD机试真题 Java 实现【表示数字】【牛客练习题】

    一 题目描述 将一个字符串中所有的整数前后加上符号 其他字符保持不变 连续的数字视为一个整数 数据范围 字符串长度满足1 n 100 二 输入描述 输入一个字符串 三 输出描述 字符中所有出现的数字前后加上符号 其他字符保持不变 四 解题思
  • linux中编译tslib1.4出错:./autogen.sh: 4: autoreconf: not found

    autogen sh 4 autoreconf not found 是在不同版本的 tslib 下执行 autogen sh 产生 它们产生的原因一样 是 因为没有安装automake 工具 ubuntu 10 04 用下面的命令安装好就可
  • Java微信小程序的授权登陆

    前提 获取服务号的公众号平台 中的 开发配置 进去 获取小程序的 AppId 与 AppSevrect 登陆授权作用域分为两种 一 静默登陆 scope参数值为 snsapi base 只能获取到用户openid 好处是静默认证 无需用户手
  • Qt窗口之QMainWindow、QDialog、QWidget

    在 Qt 中 我们将窗口和控件统称为部件 Widget 窗口是指程序的整体界面 可以包含标题栏 菜单栏 工具栏 关闭按钮 最小化按钮 最大化按钮等 控件是指按钮 复选框 文本框 表格 进度条等这些组成程序的基本元素 一个程序可以有多个窗口
  • android面试-事件分发

    回答思路 首先事件是哪几个事件 视图的结构 事件分发的整个流程 事件类型 首先事件分为按下 移动 抬起 还有一个cancel 非人为的结束 视图结构 首先得有个结构模型概念 ViewGroup和View组成了一棵树形结构 最顶层为Activ
  • 中台战略-第九章、数字营销的技术架构与路径

    文章目录 第九章 数字营销的技术架构与路径 9 1基于中台架构 构建立体数字营销云 9 2 数字营销技术架构和设计理念 9 2 1 数字营销云应用介绍 1 全域会员i CDP 2 智能营销i Marketing 3 全渠道销售i Comme
  • 在线沙箱网站 在线恶意文件监测网站 病毒在线监测网站 apk分析在线网站

    沙箱 https www joesandbox com windows 沙箱 VirSCAN https www virscan org language de 只能传20M以内的文件 VirusTotal https www virust
  • 【注释模板】IDEA中JAVA类、方法注释模板教程

    文章目录 TOC 1 引言 2 JAVA创建类时注释模板配置 2 1 打开IDEA 依次点击File gt Setting 2 2 在Settings界面中依次点击Editor gt File and Code Templates 并在Fi
  • 关于示波器产生奇特波形的解释

    转发 https blog csdn net y511374875 article details 80583585
  • 让机器“看山是山”:脑启发的视觉计算

    编者按 人生之三境界的第一层 看山是山 看水是水 本质上展示了人 看见 的过程 以及思绪与理解在这一过程中所起的作用 看见 对于人类而言 似乎是一个很简单自然的事情 其实则不然 从地球上第一个长出眼睛的生物三叶虫 走到今天的人类视觉 经历了
  • office365 无法登录_office365、office2019微软账号无法登录如何解决?

    我相信很多人肯定被这个问题折磨得头大 因为微软服务器在国外的原因 所以部分设备很难登入 但是OneNote Office365 Ofice等软件如果是绑定了微软账号的 需要登入微软账号才可以激活和保存数据 日常帮助很多订阅客户处理过这个问题
  • 【数据结构】循环队列的实现(附带详细注释)

    前言 数据结构系列首页 是数据结构系列文章的首页 其中会逐步更新各种数据结构的实现 有兴趣的选手可以一看 首页中不仅有各种数据结构的实现 还有学习数据结构必备的基础知识 如果有选手觉得自己的基础不太牢固 可以先将搞定基础知识 之后再攻克数据