//使用数组实现队列
#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. 解决 django channel: zadd() got an unexpected keyword argument 'daphne.response.HzSXMUhzYL!QSfUgrDObf'

    在stackoverflow上找到答案 If you are using Redis version 3.0 or above, it will not work with channels vers ...

  2. 通过nft持有大户地址获取正常交易和内部交易

    /*内部交易*/------------ CREATE TABLE `internal_txlist` ( `blockNumber` varchar(255) DEFAULT NULL, `tx_t ...

  3. vue-quill-editor 图片上传处理

    <template> <div class="quill-editor"> <!-- 图片上传组件辅助--> <el-upload cla ...

  4. python max()用法

    起因是看到一道面试题 "统计字符串中出现次数最多的字符,并返回出现次数" 问题很简单,刚开始没思路,只想到了循环统计,但是觉得太蠢了,直到我发现了max()的key用法,果然还是我 ...

  5. Python 获取IP地址

    import socket def get_host_ip(): """ 查询本机ip地址 :return: """ try: s=sock ...

  6. 6. Python 模块

    模块其实就是一个python文件 python导入模块的顺序 1. 从当前目录下找需要导入的python文件 2. 从python的环境变量中找 sys.path 当前目录和sys.path中都有im ...

  7. Kubernetes--用kubeadm搭建集群环境

    架构 k8s的组件架构图 OCI (Open Container Initiative) 开放容器标准.是一个轻量级,开放的治理结构(项目),在 Linux 基金会的支持下成立,致力于围绕容器格式和运 ...

  8. 【STM32】NVIC嵌套中断向量控制器与外部中断

    两种优先级 抢占优先级PreemptPriority:中断服务函数正在执行时,抢占优先级高的可以打断抢占优先级低的,实现中断的嵌套,相当于51的"高优先级" 响应优先级(子优先级) ...

  9. Windows相关产品密钥

    Win7/Win8/Win10系统下Visual Studio 2013各个版本的密钥:Visual Studio Ultimate 2013: BWG7X-J98B3-W34RT-33B3R-JVY ...

  10. 微信小程序注册、登录小功能都在这

    微信小程序实现注册.登录页面的小功能整理,希望对大家有帮助. 1. 正则验证手机号码 var mobile = that.data.phone;     var myreg = /^(((13[0-9 ...