牺牲一个存储空间的循环队列实现方法
牺牲一个存储空间的循环队列实现方法
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
队未满
队不为空
队未满
队为空
牺牲一个存储空间的循环队列实现方法相关推荐
- 为什么循环队列要浪费一个存储空间
为什么循环队列要浪费一个存储空间 什么是队列 队空和队满 队列的实现 数组实现队列 链表实现队列 假溢出问题 循环队列 队空和队满 实现循环队列 队列实战 两个栈实现队列 总结 什么是队列 队列和数组 ...
- Java数组实现循环队列的两种方法
用java实现循环队列的方法: 1.增加一个属性size用来记录目前的元素个数.目的是当head=rear的时候,通过size=0还是size=数组长度,来区分队列为空,或者队列已满. 2.数组中只存 ...
- c语言自动生成球队名称,C语言实现队(循环队列)
之前用链表实现队,这里用数组实循环队列,今天又看了一下队列,发现少了计算队列长度的函数 队列的实现代码,牺牲一个元素存储空间 #include#define maxsize 10 typedef in ...
- 基于数组实现循环队列(基于Java实现)
title: 基于数组实现循环队列(基于Java实现) tags: 数组 循环队列 基于数组实现循环队列的方法原理: 我们在用数组实现队列的时候,发现当tail = n时,就会有数据搬移的操作,这样一 ...
- 单片机的 FIFO循环队列实现
转自:单片机的FIFO(先入先出)循环队列实现 // // 文件:config.h // #ifndef __CONFIG_H #define __CONFIG_H //这一段无需改动 //This ...
- 【数据结构】--队列之循环队列
队列: 一种访问受限的线性表,只能在一端进行插入,另一端删除 先进先出(FIFO),队尾插入,队头删除 队列的分类:顺序队列.链表队列 顺序队列:底层的数据结构是内存连续的,基于数组实现队列的先进先出 ...
- 加油站问题的题解与分析——循环队列+合并
1. 题目描述 问题来源及详细描述:https://leetcode-cn.com/problems/gas-station/ 描述:汽车的初始油量为0,油箱容量无限大,判断是否能够从某一加油站出发, ...
- 队列的定义、循环队列的顺序存储结构及链式存储结构
文章目录 1 队列的定义 1.1 文字定义 1.2 代码定义 2 循环队列 2.1 循环队列的定义 2.2 循环队列的顺序存储结构 3 队列的链式存储结构 3.1 链队列的入队操作 3.2 链队列的出 ...
- 标志位法实现循环队列
为了解决顺序队列假溢出的问题,提出了循环队列.使得内存的利用率得到了很大的提升.但是在判断循环队列空和满这两种状态任然存在问题,因为对于一个循环队列,不做任何判空和判满的机制.判空和判满的条件都是:q ...
最新文章
- 软件架构是软件的组织形式
- Vivado下几条 Verilog 综合规则
- 修改openssh源代码,添加操作记录审记功能
- 信令风暴问题根因分析
- python散点图拟合曲线-【python常用图件绘制#01】线性拟合结果图
- andriod开发环境配置
- 2017 Material design 第四章第三节《度量和参考线》
- 基于TCP的Socket通讯
- Java FileDescriptor sync()方法与示例
- Jquery Easyui Datagrid创建代码
- 在微信小程序中绘制图表(part1)
- python 去除txt文本内容重复值
- 计算机二级报名省市,计算机二级报名通知:全国19省市报名时间及考试安排!...
- 浪潮信息服务器哪个好,华为服务器和浪潮服务器哪个好?
- IMO模型编程思维法(Input-Model-Output)
- mysql datesub interval_Mysql之INTERVAL与DATE_SUB与EXTRACT函数的使用
- ios10 上下黑边问题
- 前缀后缀表达式 表达式X=A+B*(C-D)/E+F的后缀表示形式可以为( )
- 【Error2013:2013 lost connection to MYSQL server在处理大量数据运行中报错解决方法】
- 盘点TMT领域10家国内投资机构