【数据结构 03】循环队列

一、原理

循环队列从功能角度具有队列的性质,即遵从先进先出原则,但是其存储方式是顺序存储。

循环队列的存储空间大小通常都是固定的,通过前指针和尾指针的移动控制循环队列数据的增删。

特征:顺序存储、先进先出、容量有限(循环利用)

设计理念:

  1. 初始化一个队列空间(容量为C),这是循环队列能够存储数据的最大容量数
  2. 设置头指针front和尾指针rear,刚开始时front和rear指向同一个数据存储地址
  3. 新增数据,front不动,rear指向下一个数据存储地址
  4. 删除数据,rear不懂,front指向下一个数据存储地址
  5. 为了防止front和rear越界,front和rear在每次移动之后都会对容量C取模

当循环队列为空或为满的时候,front和rear都指向同一个位置,该如何区分呢?

  1. 在容量为C的队列空间中,取出一个数据块空间不存储数据,用于区分队列空和队列满
  2. 此空数据块位于front的后一个地址,当rear和front之间只相隔一个数据块,即规定的空数据块时,不再新增数据
  3. 随着队列前指针front移动,空数据块也跟着移动

二、CircularQueue.h

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <stdlib.h>#define CAPACITY 5
// 循环队列的容量,通常循环队列存储元素的个数为容量-1typedef int DataType;typedef struct CirQueue
{DataType* data;int front;int rear;
}CirQueue;void Init(CirQueue* cq)
{cq->data = (DataType*)malloc(sizeof(DataType) * CAPACITY);cq->front = cq->rear = 0;
}int Empty(CirQueue* cq)
{return cq->front == cq->rear;
}int Full(CirQueue* cq)
{return (cq->rear + 1) % CAPACITY == cq->front;
}void Push(CirQueue* cq, DataType x)
{if (Full(cq)){printf("循环队列已满,push失败\n");return;}cq->data[cq->rear] = x;cq->rear = (cq->rear + 1) % CAPACITY;
}void Pop(CirQueue* cq)
{if (Empty(cq)){printf("循环队列已空,pop失败\n");return;}cq->front = (cq->front + 1) % CAPACITY;
}int Size(CirQueue* cq)
{return ((cq->rear + CAPACITY) - cq->front) % CAPACITY;
}void Print(CirQueue* cq)
{if (Empty(cq)){printf("循环队列为空\n ");return;}int pos = cq->front;while (pos != cq->rear){printf("%2d ", cq->data[pos]);pos = (pos + 1) % CAPACITY;}printf(",循环队列存储元素个数为:%d\n", Size(cq));
}

三、test.c

#define _CRT_SECURE_NO_WARNINGS 1#include "CircularQueue.h"int main()
{CirQueue cq;Init(&cq);Push(&cq, 1);Push(&cq, 3);Push(&cq, 5);Push(&cq, 7);Push(&cq, 2);Push(&cq, 4);Push(&cq, 6);Push(&cq, 8);Print(&cq);Pop(&cq);Pop(&cq);Print(&cq);Push(&cq, 10);Print(&cq);Pop(&cq);Pop(&cq);Pop(&cq);Pop(&cq);Pop(&cq);Print(&cq);
}

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

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

相关文章

CISAW和CISP-PTE证书选择指南

&#x1f4e3;在信息安全领域&#xff0c;选择合适的证书可以为你的职业生涯增添光彩。很多从事信息渗透行业的朋友经常讨论CISP-PTE和CISAW之间的选择问题。今天就从4个方面带你详细了解这两张证书&#xff0c;帮你做出明智的选择&#xff01; 1️⃣证书的行业前景 &#x1f4…

科技云报道:新趋势下,国产数据库或“春山可望”

科技云报道原创。 从540亿元到1286亿元——这是中国通信标准化协会大数据技术标准推进委员会针对中国数据库行业给出的一份预测报告。 报告指出&#xff0c;未来五年&#xff0c;中国数据库行业将从百亿级市场跨越成为千亿级市场。 最近两年&#xff0c;中国的数据库行业似乎…

找企业找客户的小众宝藏网站!私密收藏!

作为一个销售新人&#xff0c;你是否有个疑问&#xff1a;为什么身边的同事&#xff0c;明明都是刚刚进来&#xff0c;觉得和自己差不多&#xff0c;但每天都可以和客户打电话沟通&#xff01;而且打的还不是无效电话&#xff0c;成交量比自己多得多了。 明明自己也去企XX&…

计算机软件能力认证考试CCF-202312-1 仓库规划

#自己跑的测试没问题&#xff0c;不知道为啥就是不能满分 原理比较绕&#xff0c;就是让数组中一行不断地与其他行进行比较&#xff0c;最终得到各自的索引 #include <iostream> using namespace std; int main() {int n;int m;cin>>n>>m; int array[n][m];…

双非本科准备秋招(12.2)—— 力扣栈与队列

复习一下栈和队列的基础知识&#xff0c;刷几道题上上手。 1、102. 二叉树的层序遍历 广度优先遍历嘛&#xff0c;每次拓展一个新结点&#xff0c;就把新结点加入队列&#xff0c;这样遍历完队列中的元素&#xff0c;顺序就是层序遍历。 class Solution {public List<Lis…

超声波风速风向仪的工作原理

TH-WQX2在我们的日常生活中&#xff0c;气象条件的影响无处不在。无论是准备户外活动&#xff0c;还是安排农业生产&#xff0c;了解当天的风速和风向都是非常关键的。随着科技的发展&#xff0c;超声波风速风向仪的出现为气象监测带来了革命性的变化。 一、超声波风速风向仪的…

利用二分法及不动点迭代求解非线性方程(MatLab)

一、问题描述 利用二分法及不动点迭代求解非线性方程。 二、实验目的 掌握二分法及不动点迭代的算法原理&#xff1b;能分析两种方法的收敛性&#xff1b;能熟练编写代码实现利用二分法及不动点迭代来求解非线性方程。 三、实验内容及要求 二分法 (1) 编写代码计算下列数字…

考研高数(共轭根式)

1.定义 共轭根式&#xff1a;是指两个不等于零的根式A、B&#xff0c;若它们的积AB不含根式&#xff0c;则称A、B互为共轭根式。 共轭根式的一个显著特点是通过相乘能把根号去掉&#xff0c;这是很有帮助的 2.常用的共轭根式 3.例题 1&#xff09;求极限 2&#xff09;证明…

IDEA 取消参数名称提示、IDEA如何去掉变量类型提醒

一、IDEA 取消参数名称显示 取消显示形参名提示 例如这样的提示信息 二、解决方法 1、File—>Setting–>Editor—>Inlay Hints—>Java 去掉 Show Parameter hints for 前面的勾即可&#xff0c;然后Apply—>Ok 2、右键Disable Hints

uni-app在hbuilderx打开微信开发工具运行

一、运行设置配置微信开发者工具路径 运行-运行到小程序模拟器-运行设置 配置微信开发工具的安装路径&#xff08;可浏览文件位置选择&#xff09;&#xff1b;web服务器端口号在第二步骤获得&#xff1b; 二、打开微信开发者工具设置-安全设置 打开服务端口开关&#xff0…

广度优先搜索(BFS)

AcWing 844. 走迷宫 #include <bits/stdc.h> using namespace std;const int N 110; typedef pair<int, int> PII;int n, m; int g[N][N], d[N][N];int dx[4] {1, 0, -1, 0}; int dy[4] {0, 1, 0, -1};void bfs() {queue<PII> q;q.push({0, 0});d[0][0] …

【学习笔记】Vue3源码解析:第一部分-实现vue3环境搭建

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第一部分&#xff1a;实现vue3环境搭建&#xff08;对应课程的第1-3节&#xff09; VUE2与VUE3的对比&#xff1a; 也即vue2的痛点&#xff1a; 对TypeSc…