文章目录

  • 前言
  • 1、简介
  • 2、数据结构
  • 3、基本操作
    • 3.1初始化
    • 3.2 判断队空
    • 3.3 入队
    • 3.4 出队
    • 3.5 获取长度
  • 4、完整代码

前言

代码这种东西,每个人的想法或多或少有点不一样,不用死磕某一个人的代码,而是要靠自己思考出来数据之间的变化,写出属于自己的代码。

1、简介

1.1 定义
循环队列是基于队列改进的数据结构。
初始化:rear = front =0
队空:rear == front
队满:rear+1 == front。

2、数据结构

循环队列的数据结构有多种,但是万变不离其宗,不过是换一种方式表达信息罢了。

typedef struct{ElemType Data[MaxSize];int front,rear;
}SqQueue;

3、基本操作

3.1初始化

SqQueue InitQueue(SqQueue Q){Q.front = Q.rear = 0;return Q;
}

3.2 判断队空

bool Empty(SqQueue Q){if (Q.front == Q.rear){return true;}else{return false;}
}

3.3 入队

bool EnQueue(SqQueue &Q, int x){if ((Q.rear+1)%MaxSize == Q.front){cout << "Queue is Full"  << endl;return false;}else{Q.Data[Q.rear] = x;cout << "EnQueue Successfully:" << Q.Data[Q.rear] << endl;Q.rear = (Q.rear+1)%MaxSize;return true;}
}

3.4 出队

bool DeQueue(SqQueue &Q, int &x){if (Empty(Q)){cout << "Queue Empty" << endl;return false;}else{x = Q.Data[Q.front];Q.front = (Q.front+1)%MaxSize;cout << "DeQueue Successfully:" << x << endl;return true;}
}

3.5 获取长度

int GetLen(SqQueue Q){return (Q.rear-Q.front+MaxSize) % MaxSize;
}

4、完整代码

#include<iostream>
using namespace std;typedef int ElemType;#define MaxSize 50
#define Error -1
typedef struct{ElemType Data[MaxSize];int front,rear;
}SqQueue;SqQueue InitQueue(SqQueue Q);
bool Empty(SqQueue Q);
bool EnQueue(SqQueue &Q, int x);
bool DeQueue(SqQueue &Q, int &x);
int GetLen(SqQueue Q);
int main(){SqQueue Q = InitQueue(Q);cout << Q.rear << " " << Q.front << endl;EnQueue(Q,12);EnQueue(Q,45);cout << "Len of Queue is:" << GetLen(Q) << endl;int x;DeQueue(Q,x);DeQueue(Q,x);cout << "Len of Queue is:" << GetLen(Q) << endl;return 0;
}SqQueue InitQueue(SqQueue Q){Q.front = Q.rear = 0;return Q;
}bool Empty(SqQueue Q){if (Q.front == Q.rear){return true;}else{return false;}
}bool EnQueue(SqQueue &Q, int x){if ((Q.rear+1)%MaxSize == Q.front){cout << "Queue is Full"  << endl;return false;}else{Q.Data[Q.rear] = x;cout << "EnQueue Successfully:" << Q.Data[Q.rear] << endl;Q.rear = (Q.rear+1)%MaxSize;return true;}
}bool DeQueue(SqQueue &Q, int &x){if (Empty(Q)){cout << "Queue Empty" << endl;return false;}else{x = Q.Data[Q.front];Q.front = (Q.front+1)%MaxSize;cout << "DeQueue Successfully:" << x << endl;return true;}
}int GetLen(SqQueue Q){return (Q.rear-Q.front+MaxSize) % MaxSize;
}

(8)数据结构-循环队列相关推荐

  1. python环形队列_Python 实现数据结构-循环队列的操作方法

    今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删 ...

  2. 循环队列的java结构_Java数据结构——循环队列

    普通顺序队列存在的问题 在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位.出队时,则是头指针front后移一个单位.像这样进行了一定数量的入队和出队操作后 ...

  3. 数据结构--循环队列

    循环队列 图片讲解

  4. [数据结构]-循环队列

    循环队列 package com.cn.jichu.day09;public class LoopQueue<E> {/*** 数组*/private E[] data;/*** 头指针, ...

  5. 数据结构循环队列C++实现

    1.队列的概念 队列只允许在表的一端插入,另一端删除.允许插入的一端叫做队尾,允许删除的一端叫做对首.队列的特性叫"先进先出".和栈一样,队列的存储形式也有两种,基于数组的存储表示 ...

  6. 数据结构-循环队列(C语言代码)

    循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用.在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可 ...

  7. Python写数据结构:循环队列

    #!/usr/bin/python3.5 #_*_coding:utf-8_*_class Queue():def __init__(self,capacity):self.queue = [None ...

  8. c语言 数据结构 循环队列

    #include<stdio.h> #include<stdlib.h> #define QueueSize 100 typedef char DataType; typede ...

  9. 数据结构之——队列与循环队列

    数据结构学习之--队列与循环队列 什么是队列(Queue) 队列基于动态数组的实现及时间复杂度分析 优化队列 循环队列(LoopQueue) 什么是队列(Queue) 队列(Queue)同栈(stac ...

  10. 【数据结构】队列-顺序队列、循环队列、链队、双端队列

    定义 队列是只允许在一端进行插入,而在另一端进行删除的线性表. 队头(Front):允许删除的一端,又称为队首. 队尾(Rear): 允许插入的一端. 先进入队列的元素必然先离开队列,即先进先出(Fi ...

最新文章

  1. Petapoco 连接oracle11g 自动生成poco时遇到的问题
  2. jdk8新特性 lambda表达式详解
  3. 二、通过工厂方法来配置bean
  4. 【模块】ESP32CAM arduino程序下载方法及注意事项避坑笔记
  5. java基础—自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存(java集合三)
  6. 【Elasticsearch】Elasticsearch之别名
  7. 文件夹选择对话框 JS实现(转)
  8. JavaScript跨域解决方法大全
  9. Android Studio中R报错(cnanot resolve symbol R)
  10. VS2012下基于Glut 绘制矩形管示例程序:
  11. java 类修饰符 作用域_java的4种内部类,你真的了解了吗?
  12. 将博客搬至CSDN(放弃)
  13. 在java中实现订餐系统_Java实现简单订餐系统
  14. 一文带你看懂~混沌理论
  15. aliplayer隐藏工具条
  16. dcdc 国产 电源芯片电路方案 选型小体积大功率高性价比推荐 不定期更新中..
  17. 探索深海生态系统和冰卫星的协同作用-深海机器人开发与空间技术合作
  18. 锋利的blade到底锋利在哪里
  19. Windows下python安装PyCrypto加密模块以及使用
  20. 【编译原理】词法分析(正规式与自动机)

热门文章

  1. GIT在Linux上的安装和使用简介
  2. mysql使用innodb需要注意的情况
  3. 【损失函数】Focal Loss for Dense Object Detection And RetinaNet
  4. 欧几里得算法求最大公约数
  5. 比 matplotlib 效率高十倍的数据可视化神器
  6. 数据--第39课 - 二叉树课后练习
  7. java中构造器的调用顺序
  8. 凸优化第二章凸集 2.1 仿射集合和凸集
  9. plotting and saving over line in paraView
  10. Docker | 第四章:Dockerfile简单介绍及使用