//使用数组实现队列
#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. 准备工作——安装python和开发工具

    1.安装python 官网(https://www.python.org/downloads/)下载,按步骤安装,注意点击环境变量设置. 网上很多安装步骤详解. 2.或者直接安装anaconda,集成 ...

  2. 怎么解决CMD下执行Go出现中文乱码问题?

    目录 1.报错信息如下 2.原因分析 3.解决方法 4.封装处理乱码方法 5.解决乱码完整代码 1.报错信息如下 2.原因分析 因为Go的编码是UTF-8,而CMD的活动页是cp936(GBK),因此 ...

  3. 在vue js中for循环使用

    在线免费图片压缩工具 前端技术站 1.for(let item of response.data.result) { 用item操作每一条数据. } item:定义的每一条的变量 response.d ...

  4. Burp Suite入门

    Burpsuite Burp Suite是一个Web应用程序集成攻击平台,它包含了一系列burp工具,这些工具之间有大量接口可以互相通信,这样设计的目的是为了促进和提高整个攻击的效率.平台中所有工具共 ...

  5. CSS3滤镜属性filter让网页变黑白

    很多特殊的时候,我们向英雄们致敬,在互联网上最常见的方式就是整个网页变黑白,今天逛某博客收集一段代码,用于网页整体变黑白,用css3滤镜属性filter让网页马上变黑白,一行代码就搞定. 在你的css ...

  6. 【mysql练习】转置,总计,分组

    1,有如下一个表,要求把这个表按照2016,2017,2018,2019,把从1月到12月的金额展示出来. profit表: year month amount2019 1 52019 3 62018 ...

  7. 接口自动化-pycharm下查看日志文件中文乱码

      如图: 方法:pycharm 进入setting,找到File Encodings将编码全部设置gbk 现在室这样的:    修改为: 再次看日志:

  8. 可视化 之D3 与echarts 对比以及应用场景

    可视化:我们想要看出一组数据的大小关系,单看数据显然不够直观.那么我们可以将它转换为一种简单易懂的图表的形式,就可以更加直观的获取数据所传递给我们的信息.这个过程就叫做数据可视化.可视化常用2个前端库 ...

  9. jvm中的年轻代 老年代 持久代 gc ----------转载

    jvm中的年轻代 老年代 持久代 gc 虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Generation)和持久代(Permanent Generation) ...

  10. C语言博客作业07

    1.作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3 这个作业要求在哪里 https://edu.cnblogs.com/cam ...