数组循环队列针对数据量不大的情况下使用,可以快速地实现元素的入队和出队。入队和出队遵循先进先出(FIFO)的原则。结构体组成如下:

typedef int datatype;
typedef struct _loopQueue {datatype* data;int front;int rear;
}loopQueue;

其中基本的操作图如下:
循环队列入队,队尾循环后移 lq->rear=(lq->rear+1)%MAX_SIZE
循环队列出队,队头循环后移lq->front=(lq->front+1)&MAX_SIZE
循环队列队空 lq->front=lq->rear=0;//初始化时指向同一位置
循环队列满 (lq->rear+1)%MAX_SIZE=lq->front
队列的长度计算,分两种情况: 如果 lq->rear> lq->front
队列长度为 lq->rear-lq->front;若lq->rearfront,队列长度为 MAX_SZIE-lq->front-lq->rear),即 lq->rear-lq->front+MAX_SIZE;
统一上述两种情况 长度为(lq->rear-lq->front+MAX_SIZE)%MAX_SIZE
完整的代码实现如下:

#include<Windows.h>
#include<iostream>
using namespace std;
#define MAX_SZIE 5
typedef int datatype;
typedef struct _loopQueue {datatype* data;int front;int rear;
}loopQueue;
bool initLoopQueue(loopQueue* &lq);
bool isFull(loopQueue* &lq);
int getLength(loopQueue* &lq);
void loopQueuePrint(loopQueue*& lq);
bool loopQueueEnter(loopQueue*& lq, datatype data);
bool loopQueueDelete(loopQueue*& lq, datatype &data);int main() {loopQueue* lq;if(!initLoopQueue(lq)) {cout << "初始化失败!" << endl;exit(1);}for (int i = 0; i < 10; i++) {if (loopQueueEnter(lq, i)) {cout << "入队成功:"<<i<<endl;}else {cout << "入队失败:" << i << endl;}}cout << "队列的长度为:" << getLength(lq)<<endl;int data;for (int i = 0; i < 2; i++) {if (loopQueueDelete(lq, data)) {cout << "出队成功:" << data << endl;}else {cout << "出队失败:"  << endl;}}for (int i = 10; i < 15; i++) {if (loopQueueEnter(lq, i)) {cout << "入队成功:" << i << endl;}else {cout << "入队失败:" << i << endl;}}cout << "队列的长度为:" << getLength(lq) << endl;loopQueuePrint(lq);system("pause");return 0;
}
bool initLoopQueue(loopQueue* &lq) {lq = new loopQueue;if (!lq) return false;lq->data = new datatype[MAX_SZIE];memset(lq->data, 0, MAX_SZIE);lq->front = lq->rear = 0;return true;
}
bool isFull(loopQueue*& lq) {if (!lq) return false;if ((lq->rear + 1) % MAX_SZIE == lq->front)return true;else return false;
}
int getLength(loopQueue*& lq) {if (!lq) return false;return (lq->rear - lq->front + MAX_SZIE) % MAX_SZIE;
}
void loopQueuePrint(loopQueue* &lq) {if (!lq || lq->front == lq->rear) return;int tmp = lq->front;while (1) {       datatype num = lq->data[tmp];cout << num << " ";tmp=(tmp+1)% MAX_SZIE;if (tmp == lq->rear) break;}
}
bool loopQueueEnter(loopQueue*& lq, datatype data) {if (!lq || isFull(lq)) return false;lq->data[lq->rear] = data;lq -> rear = (lq->rear + 1) % MAX_SZIE;return true;
}
bool loopQueueDelete(loopQueue*& lq, datatype& data) {if (!lq || lq->front == lq->rear) return false;data = lq->data[lq->front];lq->front = (lq->front + 1) % MAX_SZIE;return true;}

20200120 数据结构和算法之 数组循环队列的实现相关推荐

  1. 菜鸟窝-数据结构与算法之数组实现队列

    categories: 数据结构与算法 tags: 队列 title: 数据结构与算法之队列 date: 数据结构之队列 定义:有序列表,可以通过数组或者链表实现,遵循先入先出的原则 数组实现普通队列 ...

  2. golang数据结构与算法——稀疏数组、队列和链表

    文章目录 一 稀疏数组 1.1 先看一个实际的需求 1.2 稀疏数组基本介绍 1.3 稀疏数组举例说明 1.4 把数组转换为稀疏数组实现 1.5 把稀疏数组还原为原数组 二 队列 2.1 队列的介绍 ...

  3. (数据结构与算法)数组模拟队列和环形队列

    文章目录 数组模拟队列 思路 代码实现 问题分析并优化 数组模拟环形队列 思路 代码实现 数组模拟队列 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取 ...

  4. 【数据结构与算法 2】循环队列

    一.队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表. 进行插入操作的端称为队尾,进 ...

  5. 数据结构和算法之数组模拟队列

    特点:先入先出(类似于银行排队问题) 一.数组模拟队列 package com.company;import java.util.Scanner;/*** @author:抱着鱼睡觉的喵喵* @dat ...

  6. 【数据结构与算法】设计循环队列

    文章目录

  7. 数据结构与算法(2)——栈和队列

    前言:题图无关,只是好看,接下来就来复习一下栈和队列的相关知识 前序文章: 数据结构与算法(1)--数组与链表(https://www.jianshu.com/p/7b93b3570875) 栈 什么 ...

  8. 数据结构与算法(C++)– 队列(Queue)

    数据结构与算法(C++)– 队列(Queue) 1.队列 先进先出(First in, First out) enqueue 入队,dequeue 出队 front 队头,rear / back 队尾 ...

  9. 04_JavaScript数据结构与算法(四)队列

    JavaScript 数据结构与算法(四)队列 认识队列 队列(Queue)是一种运算受限的线性表,特点:先进先出.(FIFO:First In First Out) 受限之处: 只允许在表的前端(f ...

最新文章

  1. 有关mysql事务冲突
  2. mysql 启动参数_MySQL启动相关参数 MySQL DBA学习
  3. UVA11389巴士司机问题
  4. Algorithm之MC:基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动
  5. 线程池状态和使用注意点
  6. ConcurrentHashMap底层原理?
  7. linux系统下如何使用U盘、光盘、软盘?如何挂载U盘,光盘镜像?
  8. Eclipse·Maven·构建SpringMVC简单工程-3
  9. 虚拟机实现java线程_深入理解java虚拟机(23):java与多线程
  10. 无意中最大的收获:《构建高性能Web站点》
  11. matlab:高斯函数对图像的空域滤波和频域滤波
  12. 推荐几个好用的 html5 游戏源码下载网站
  13. MySQL 安全审计、容灾备份、数据恢复
  14. PHPwebshell2022免杀bypass阿里云盾等所有安全设备
  15. Es 模糊查询 match,wildcard
  16. 连接数据库不同方式会影响TTBF快慢
  17. App_Offline.htm 问题解决
  18. springboot全局异常处理BasicErrorController和RestControllerAdvice
  19. python3可视化-pyecharts图形库,利用Map进行地图的创建和使用
  20. 迁移学习---TrAdaBoost算法介绍

热门文章

  1. 在Mac电脑中轻松打开终端程序的快捷方法
  2. Python GDAL矢量转栅格详解
  3. Sublime 查看Json格式数据
  4. 在linux上安装navicat 出现使用一段时间后闪退的情况
  5. 第一个项目的大概流程
  6. Centos安装RabbitMQ超详细(必须收藏)
  7. 论文解读(一)V-Net: Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation
  8. AEIA2018 | 中国工程院院士李骏:智能网联汽车的安全和自主创新是当下的关键...
  9. 为什么微信打开小程序很慢_微信小程序应用打开很慢怎么办
  10. 河南山东商会刘继臣 全国工商联·万祥军:商协社团儒商大会