牺牲一个存储空间的循环队列实现方法

1.定义循环队列的数据结构
2.初始化
3.入队操作
4.出队操作
5.读队头元素
6.判空操作
7.判满操作
8.计算当前队列中元素的个数
9.测试
10.终端输出结果

所用编译器:Visual Studio Code 1.42.1 C++环境

#include <stdio.h>
#define MaxSize 10
typedef int ElemType;
//定义循环队列的数据结构
typedef struct{ElemType data[MaxSize];int front,rear;
}SqQueue;
//初始化
void InitQueue(SqQueue &Q){Q.front=0;Q.rear=0;
}
//入队操作
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;
}
//出队操作
bool DeQueue(SqQueue &Q,ElemType &x){if(Q.rear==Q.front)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;
}
//判空操作
bool QueueEmpty(SqQueue Q){return(Q.rear==Q.front);
}
//判满操作
bool QueueFull(SqQueue Q){return((Q.rear+1)%MaxSize==Q.front);
}
//计算当前队列中元素的个数
void QueueNum(SqQueue Q,int &x){x=(Q.rear+MaxSize-Q.front)%MaxSize;
}
//测试
int main(){SqQueue Q;InitQueue(Q);ElemType a,b,x,num;//入队4个数,依次为2,4,6,8EnQueue(Q,2);EnQueue(Q,4);EnQueue(Q,6);EnQueue(Q,8);//出队2个数并打印 DeQueue(Q,a); DeQueue(Q,b);printf("a=%d\n",a); printf("b=%d\n",b);//读当前队头元素并打印GetHead(Q,x);printf("x=%d\n",x);//计算当前队列长度QueueNum(Q,num);printf("num=%d\n",num);//判断此时队列是否为满,是否为空if(QueueFull(Q))printf("队已满\n");elseprintf("队未满\n");if(QueueEmpty(Q))printf("队为空\n");elseprintf("队不为空\n");//将剩下的两个元素出队,然后判断队列是否为满,是否为空DeQueue(Q,a);DeQueue(Q,b);if(QueueFull(Q))printf("队已满\n");elseprintf("队未满\n");if(QueueEmpty(Q))printf("队为空\n");elseprintf("队不为空\n");
}
//终端输出结果
PS D:\VSCode\第三章 栈和队列\队列的顺序存储> cd "d:\VSCode\ ջͶ\е˳洢\" ; if ($?) { g++ ѭ.cpp -o ѭ } ; if ($?) { .\ѭ }
a=2
b=4
x=6
num=2
队未满
队不为空
队未满
队为空

牺牲一个存储空间的循环队列实现方法相关推荐

  1. 为什么循环队列要浪费一个存储空间

    为什么循环队列要浪费一个存储空间 什么是队列 队空和队满 队列的实现 数组实现队列 链表实现队列 假溢出问题 循环队列 队空和队满 实现循环队列 队列实战 两个栈实现队列 总结 什么是队列 队列和数组 ...

  2. Java数组实现循环队列的两种方法

    用java实现循环队列的方法: 1.增加一个属性size用来记录目前的元素个数.目的是当head=rear的时候,通过size=0还是size=数组长度,来区分队列为空,或者队列已满. 2.数组中只存 ...

  3. c语言自动生成球队名称,C语言实现队(循环队列)

    之前用链表实现队,这里用数组实循环队列,今天又看了一下队列,发现少了计算队列长度的函数 队列的实现代码,牺牲一个元素存储空间 #include#define maxsize 10 typedef in ...

  4. 基于数组实现循环队列(基于Java实现)

    title: 基于数组实现循环队列(基于Java实现) tags: 数组 循环队列 基于数组实现循环队列的方法原理: 我们在用数组实现队列的时候,发现当tail = n时,就会有数据搬移的操作,这样一 ...

  5. 单片机的 FIFO循环队列实现

    转自:单片机的FIFO(先入先出)循环队列实现 // // 文件:config.h // #ifndef __CONFIG_H #define __CONFIG_H //这一段无需改动 //This ...

  6. 【数据结构】--队列之循环队列

    队列: 一种访问受限的线性表,只能在一端进行插入,另一端删除 先进先出(FIFO),队尾插入,队头删除 队列的分类:顺序队列.链表队列 顺序队列:底层的数据结构是内存连续的,基于数组实现队列的先进先出 ...

  7. 加油站问题的题解与分析——循环队列+合并

    1. 题目描述 问题来源及详细描述:https://leetcode-cn.com/problems/gas-station/ 描述:汽车的初始油量为0,油箱容量无限大,判断是否能够从某一加油站出发, ...

  8. 队列的定义、循环队列的顺序存储结构及链式存储结构

    文章目录 1 队列的定义 1.1 文字定义 1.2 代码定义 2 循环队列 2.1 循环队列的定义 2.2 循环队列的顺序存储结构 3 队列的链式存储结构 3.1 链队列的入队操作 3.2 链队列的出 ...

  9. 标志位法实现循环队列

    为了解决顺序队列假溢出的问题,提出了循环队列.使得内存的利用率得到了很大的提升.但是在判断循环队列空和满这两种状态任然存在问题,因为对于一个循环队列,不做任何判空和判满的机制.判空和判满的条件都是:q ...

最新文章

  1. 软件架构是软件的组织形式
  2. Vivado下几条 Verilog 综合规则
  3. 修改openssh源代码,添加操作记录审记功能
  4. 信令风暴问题根因分析
  5. python散点图拟合曲线-【python常用图件绘制#01】线性拟合结果图
  6. andriod开发环境配置
  7. 2017 Material design 第四章第三节《度量和参考线》
  8. 基于TCP的Socket通讯
  9. Java FileDescriptor sync()方法与示例
  10. Jquery Easyui Datagrid创建代码
  11. 在微信小程序中绘制图表(part1)
  12. python 去除txt文本内容重复值
  13. 计算机二级报名省市,计算机二级报名通知:全国19省市报名时间及考试安排!...
  14. 浪潮信息服务器哪个好,华为服务器和浪潮服务器哪个好?
  15. IMO模型编程思维法(Input-Model-Output)
  16. mysql datesub interval_Mysql之INTERVAL与DATE_SUB与EXTRACT函数的使用
  17. ios10 上下黑边问题
  18. 前缀后缀表达式 表达式X=A+B*(C-D)/E+F的后缀表示形式可以为( )
  19. 【Error2013:2013 lost connection to MYSQL server在处理大量数据运行中报错解决方法】
  20. 盘点TMT领域10家国内投资机构

热门文章

  1. Phpcms黄页yp如何添加企业模板
  2. android手机红外代码HAL,Android 红外遥控器适配
  3. iOS App Clips学习笔记
  4. 哪些行业用到GPS定位系统_GPS平台_GPS定位平台系统,定位监控系统平台
  5. Imperva是什么
  6. 2021-12-17 每日一练 100元怎么买100个蛋,鸡蛋1毛一个,鸭蛋3元一个,鹅蛋6元一个
  7. Linux下C库函数到系统调用函数到内核函数调用的过程
  8. Tirp(状压DP)
  9. 啦百茁仲尾芬八敌直就乖虏举删捅
  10. 1514_人月神话阅读笔记_20年后的人月神话_上篇