//使用数组实现队列
#include <iostream>
#include <Windows.h>
using namespace std;
#define MAXSIZE 5 //队列的最大容量 typedef int DataType; //队列中的元素类型 typedef struct Queue {
DataType queue[MAXSIZE];
int front; //队头指针
int rear; //队尾指针
}SeqQueue;
//队列初始化
void InitQueue(SeqQueue *SQ) {
if (!SQ) return ;
SQ->front = SQ->rear = 0; //把队头和队尾指针同时置0
}
//判断队列为空
bool IsEmpty(SeqQueue* SQ) {
if (!SQ) return false;
if (SQ->front == SQ->rear) {
return true;
}
return false;
}
//判断队列是否为满
bool IsFull(SeqQueue* SQ) {
if (!SQ) return false;
if (SQ->rear == MAXSIZE) {
return true;
}
return false;
}
//入队,将元素data插入到队列SQ中
bool EnterQueue(SeqQueue* SQ, DataType data) {
if (!SQ)return false;
if (IsFull(SQ)) {
cout << "无法插入元素" << data << ",队列已满!" << endl;
return false;
}
SQ->queue[SQ->rear] = data; //在队尾插入元素data
SQ->rear++;//队尾指针后移一位
return true;
}
//出队方法一,将队列中队头的元素data出队,后面的元素向前移动
bool DeleteQueue(SeqQueue* SQ, DataType* data) {
if (!SQ || IsEmpty(SQ)) {
cout << "队列为空!" << endl;
return false;
}
if (!data)return false;
*data = SQ->queue[SQ->front];
for (int i = SQ->front + 1; i < SQ->rear; i++) {
SQ->queue[i - 1] = SQ->queue[i];
}
SQ->rear--;//队尾指针前移一位
return true;
}
//出队方法二,将队列中队头的元素data出队,出队后队头指针front后移一位
bool DeleteQueue2(SeqQueue* SQ, DataType* data) {
if (!SQ || IsEmpty(SQ)) {
cout << "队列为空!" << endl;
return false;
}
if (SQ->front >= MAXSIZE) {
cout << "队列已到尽头!" << endl;
return false;
}
*data = SQ->queue[SQ->front];
SQ->front = (SQ->front) + 1;//队首指针后移一位
return true;
}
void PrintQueue(SeqQueue* SQ) {
if (!SQ)return;
int i = SQ->front;
while (i < SQ->rear) {
cout << SQ->queue[i] << " ";
i++;
}
cout << endl;
}
//获取队首元素,不出队
int getHead(SeqQueue* SQ, DataType* data) {
if (!SQ || IsEmpty(SQ)) {
cout << "队列为空!" << endl;
}
return *data = SQ->queue[SQ->front];
}
//清空队列
void ClearQueue(SeqQueue* SQ) {
if (!SQ) return;
SQ->front = SQ->rear = 0;
}
//获取队列中元素的个数
int getLength(SeqQueue* SQ) {
if (!SQ)return 0;
return SQ->rear - SQ->front;
}
int main() {
SeqQueue* SQ = new SeqQueue;
DataType data = -1;
//初始化队列
InitQueue(SQ);
//入队
for (int i = 0; i < 7; i++) {
EnterQueue(SQ, i);
}
//打印队列中的元素
printf("队列中的元素(总共%d 个):", getLength(SQ));
PrintQueue(SQ);
cout << endl;
//出队
//for(int i=0; i<10; i++){
if (DeleteQueue2(SQ, &data)) {
cout << "出队的元素是:" << data << endl;
}
else {
cout << "出队失败!" << endl;
}
//}
//打印队列中的元素
printf("出队一个元素后,队列中剩下的元素:");
PrintQueue(SQ);
cout << endl; system("pause");
return 0;
}

C/C++ 数据结构使用数组实现队列的基本操作的更多相关文章

  1. 【学习总结】java数据结构和算法-第三章-稀疏数组和队列

    相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...

  2. 数据结构算法学习之队列(数组模拟java实现)

    数组模拟队列 数组模拟队列 今天学习数组模拟队列.队列常用于生活中的方方面面.比如银行叫号排队.实际上就是队列.所有人抽号排队.先去的先抽号.所以靠前的号最后会先被叫到然后出队.后边的会随之往前移位. ...

  3. 学习javascript数据结构(一)——栈和队列

    前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...

  4. 用js来实现那些数据结构(数组篇01)

    在开始正式的内容之前,不得不说说js中的数据类型和数据结构,以及一些比较容易让人混淆的概念.那么为什么要从数组说起?数组在js中是最常见的内存数据结构,数组数据结构在js中拥有很多的方法,很多初学者记 ...

  5. 数据结构之栈和队列及其Java实现

    栈和队列是数据结构中非常常见和基础的线性表,在某些场合栈和队列使用很多,因此本篇主要介绍栈和队列,并用Java实现基本的栈和队列,同时用栈和队列相互实现. 栈:栈是一种基于“后进先出”策略的线性表.在 ...

  6. php数据结构课程---3、队列(队列实现方法)

    php数据结构课程---3.队列(队列实现方法) 一.总结 一句话总结: 1.数据实现:适用于功能不复杂的情况 2.链表实现:受限链表,只能队头队尾操作:适用于功能复杂情况 1.队列的数组实现注意点? ...

  7. 我理解的数据结构(三)—— 队列(Queue)

    我理解的数据结构(三)-- 队列(Queue) 一.队列 队列是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素 队列是一种先进先出的数据结 ...

  8. Java数据结构与算法(3):队列

    队列也是一种表,不同的是队列在一端进行插入而在另一端进行删除. 队列模型 队列的基本操作包括入队.出队操作.在表的末端插入元素,在表的开头删除元素,即先进先出(FIFO). 队列的数组实现 对于每一个 ...

  9. php数据结构课程---7、队列实战

    php数据结构课程---7.队列实战 一.总结 一句话总结: 注意条件:注意循环的条件(比如while循环打印队列元素时),注意if的条件 把问题想清楚:比如链表操作初次插入元素和后面再插,效果是不一 ...

  10. Java成神之路:第三帖----数据结构与算法之队列

    数据结构与算法--队列 今天掉了两根头发,摸掉的,记得 别乱摸,很珍贵的!! 什么是队列? 1)队列是一个有序列表,可以用数组或是链表来实现 2)遵循 先入先出 的原则.即:先存入队列的数据,要先取出 ...

随机推荐

  1. 94、springboot+minio实现分片上传(超大文件快速上传)

    设计由来 在实际的项目开发中常遇到超大附件上传的情况,有时候客户会上传GB大小的文件,如果按照普通的MultipartFile方式来接收上传的文件,那么无疑会把服务器给干崩溃,更别说并发操作了.于是笔 ...

  2. [JSOI2015]圈地

    原题链接:P6094 [JSOI2015]圈地 题意简述 把一块 \(n \times m\) 的地分给两个人,选择分出第 \(i\) 行第 \(j\) 列的地可以获得 \(a_{i,j}\) 的收益 ...

  3. [Python.Unix和Linux系统管理指南]书籍

    Python.Unix和Linux系统管理指南书籍下载地址 提取码:eqf4 内容简介  · · · · · · <Python UNIX和Linux系统管理指南>介绍了Python语言如 ...

  4. WCF部署HTTP错误404.3

    错误:WCF部署HTTP错误404.3-Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加MIME映射. 解决步骤如下: 控制面板-& ...

  5. JS学习- Canvas - 遮盖组合

    Compositing 组合 globalCompositeOperation这个属性设定了在画新图形时采用的遮盖策略,其值是一个标识12种遮盖方式的字符串. 值 描述 图示 source-over ...

  6. JS篇(003)-请用 js 去除字符串空格?

    答案:replace 正则匹配方法.str.trim()方法.JQ 方法:$.trim(str)方法 解析: 方法一:replace 正则匹配方法 去除字符串内所有的空格:str = str.repl ...

  7. Unity图集打包流程

    1.先打开图集打包工具 设置为Always Enables(Legacy Sprite Packer) 打开地址Edit - ProjectSetting-Editor--Sprite Packer ...

  8. 我眼中的Serverless

    https://cloud.tencent.com/document/product/583 摆脱服务器.存储等底层设备,只上传代码,由云服务器提供服务的触发,维护,调用.

  9. 【2020NOI.AC省选模拟#7】A. t1

    题目链接 原题解: 由于$+$满足幂等性,我们可以设$f_{i,j}$为从$i$号点向根$2^j$个点的权值之和,并且倍增计算出$f$.在查询是,可以像ST表一样用至多四个$f$中的路径拼出询问路径. ...

  10. 冰冻三尺非一日之寒,记录Java

    一.数据类型 Java是一种强类型语言,什么是强类型语言? 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 Java的数据类型又分为两大类: 1.基本类型:基本类型有分为数值 ...