#include<iostream>
#include<cstdlib>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef int Elemtype;
typedef struct
{
Elemtype* base;//存储空间的基地址
int front;//头指针
int rear;//尾指针
}SqQueue;
Status InitQueue(SqQueue& Q);//初始化循环队列
Status CreatQueue(SqQueue& Q);//随即输入循环队列长度和队列整数型数据元素的值,创建一个队列
Status EnQueue(SqQueue& Q, int e);//将一个数插入到队尾(x在程序运行时随即输入)
Status DeQueue(SqQueue& Q);//删除循环队头元素,并在删除后输出队头元素
Status GetQueue(SqQueue Q);//判断循环队列是否为空,若不空输出队头元素
Status LenQueue(SqQueue Q);//获得循环队列的长度
Status PrintQueue(SqQueue Q);//输出循环队列中的所有元素
int main(void)
{
SqQueue Q;
int x;
int k;
do {
cout << "\n*****顺序循环队列相关操作*****";
cout << "\n1.初始化一个空的循环队列";
cout << "\n2.随机创建一个非空循环队列";
cout << "\n3.将一个数x插入到队尾";
cout << "\n4.将循环队列队头元素删除,并输出元素的值";
cout << "\n5.输出队头元素";
cout << "\n6.求顺序队列的长度";
cout << "\n7.输出顺序队列中所有的元素";
cout << "\n0.结束相关操作";
cout << "\n输入想要进行相关操作的序号:";
cin >> k;
switch (k)
{
case 1:
{
if (InitQueue(Q))
cout << "初始化成功。\n" << endl;
else
cout << "初始化失败。\n" << endl;
break;
}
case 2:
{
if (CreatQueue(Q))
{
cout << "创建成功。\n";
}
else
{
cout << "创建失败。\n";
}
break;
}
case 3:
{
cout << "输入想要插入元素的数值x为:";
cin >> x;
if (EnQueue(Q, x)) cout << "插入成功。\n";
else cout << "插入失败。\n";
break;
}
case 4:
{
if (DeQueue(Q)) cout << "删除成功。\n";
else cout << "删除失败。\n";
break;
}
case 5:
{
if (GetQueue(Q)) cout << "输出成功。\n";
else cout << "输出失败。\n";
break;
}
case 6:
{
if (LenQueue(Q)) cout << "长度获取成功。\n";
else cout << "长度获取失败。\n";
break;
}
case 7:
{
if (PrintQueue(Q)) cout << "全部输出成功。\n";
else cout << "全部输出失败。\n";
break;
}
}
} while (k != 0);
return OK;
}
Status InitQueue(SqQueue& Q)//初始化循环队列
{
Q.base = new Elemtype[MAXSIZE];//为队列分配一个最大容量为MAXSIZE的数组空间
if (!Q.base) exit(OVERFLOW);
Q.front = Q.rear = 0;
return OK;
}
Status CreatQueue(SqQueue& Q)//随即输入循环队列长度和队列整数型数据元素的值,创建一个队列
{
int len = 0;
cout << "\n输入循环队列的长度len:";
cin >> len;
cout << "\n输入循环队列整数型数据元素的数据:";
for (int i = 0; i < len; i++)
{
cin >> Q.base[Q.rear];//进队尾
Q.rear = (Q.rear + 1) % MAXSIZE;//队尾加一
}
return OK;
}
Status EnQueue(SqQueue& Q, int e)//将一个数插入到队尾(x在程序运行时随即输入)
{
if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR;//循环队列满
Q.base[Q.rear] = e;//进队尾
Q.rear = (Q.rear + 1) % MAXSIZE;//队尾加一
return OK;
}
Status DeQueue(SqQueue& Q)//删除循环队头元素,并在删除后输出队头元素
{
if (Q.front == Q.rear) return ERROR;
int e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;//队头指针加一
cout << "删除的循环队列的元素为:" << e << endl;
return OK;
}
Status GetQueue(SqQueue Q)//判断循环队列是否为空,若不空输出队头元素
{
if (Q.front == Q.rear) return ERROR;
cout << "循环队列的队头元素为:" << Q.base[Q.front] << endl;
return OK;
}
Status LenQueue(SqQueue Q)//获得循环队列的长度
{
cout << "循环队列的长度为:" << (Q.rear - Q.front + MAXSIZE) << endl;
return OK;
}
Status PrintQueue(SqQueue Q)//输出循环队列中的所有元素
{
cout << "\n循环队列的元素为:";
for (int i = Q.front; i != Q.rear; i++)
{
cout << Q.base[i] << " ";
}
return OK;
}

C++实现顺序队列(循环队列)相关操作代码的更多相关文章

  1. 用数组实现队列(顺序队列&循环队列)

    用数组实现队列(顺序队列&循环队列) 顺序队列 ️ 队列(先进先出) 几个问题: 队列方法:入队.出队 队列的存储:即队首队尾两个指针, 扩容:如果队列容量不够了,应该扩容,如果队尾没有位置了 ...

  2. Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列

    Atitit.升级软件的稳定性---基于数据库实现持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...

  3. c数据结构 顺序表和链表 相关操作

    编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...

  4. java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作

    项目源码下载:http://download.csdn.net/detail/liangrui1988/6720047 效果图: 相关代码: test1 package com.mail; impor ...

  5. Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法

    前言 队列和栈非常类似,前面已经讲过了栈的实现与用法,现在我们来说说队列. 队列介绍 队列遵循FIFO(First In First Out,先进先出)原则的一组有序的项. 队列是一种特殊的线性表,特 ...

  6. 队列(循环队列)----C语言

    线性结构:有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构 非线性结构:不满足线性结构的数据结构 队列 队列一般分为两类:链式队列和顺序队列 链式队列---链式队列即用链表 ...

  7. Java数据结构——循环队列

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

  8. TypeScript算法与数据结构-队列和循环队列

    本文涉及的源码,均在我的github.有两部分队列和循环队列.有问题的可以提个issue,看到后第一时间回复 1. 队列(Queue) 队列也是一种线性的数据结构, 队列是一种先进先出的数据结构.类似 ...

  9. 数据结构-循环队列(Python实现)

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

  10. C# 数据结构基础-实现循环队列

    队列     队列的概念是先进先出,这个应该不用多说了.看下面那个从网上找的现成图片. 循环队列     循环队列在逻辑上将队列中的数据摆成环形,如下图: 下面直接上代码. 队列 队列的概念是先进先出 ...

随机推荐

  1. kafka详解(02) - kafka_2.11-2.4.1安装部署

    kafka详解(02) - kafka_2.11-2.4.1安装部署 环境准备 下载安装包 官网下载地址:https://kafka.apache.org/downloads.html 2.4.1版本 ...

  2. 《Effective C++》再次探索traits技法

    首先介绍C++标准程序库中的五种迭代器,关于这个可以看我的另一个笔记:http://blog.csdn.net/m0_37316917/article/details/70053513. 对于这五种分 ...

  3. [C++]C++11右值引用

    右值引用的概念(摘自C++Primer) 左值和右值的概念 1.左值和右值是表达式的属性,一些表达式要求生成左值,一些表达式要求生成右值:左值表达式通常是一个对象的身份,而一个右值表达式表示的是对象的 ...

  4. Volcano 社区 v1.7.0 版本正式发布 | 云原生批量计算

    摘要:北京时间2023年1月9日,Volcano社区v1.7.0版本正式发布. 本文分享自华为云社区<Volcano 社区 v1.7.0 版本正式发布 | 云原生批量计算>,作者:华为云云 ...

  5. windows系统批量转换CRLF和LF格式代码,解决eslint报错Delete `␍`解决'unix2dos' is not recognized as an internal or external command

    每天都要开心(▽)哇: 最近写代码,工程配置为lf格式,但是拉取代码后,代码都变成了CRLF,于是满屏幕报错 在做跨平台开发移植的时候,最常见的问题就是不同操作系统的换行不同(例如,Windows 上 ...

  6. 视图,触发器,存储过程,流程控制等MySQL小知识点

    视图,触发器,存储过程,流程控制等MySQL小知识点 一.SQL注入问题 登录: import pymysql conn = pymysql.connect( host='127.0.0.1', po ...

  7. SpringBoot实现电子文件签字+合同系统

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  8. Nacos配置中心 (介绍与配置)

    Nacos配置中心 当微服务部署的实例越来越多,达到数十.数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错.我们需要一种统一配置管理方案,可以集中管理所有实例的配置. Nacos一方面可以将配置 ...

  9. 0源码基础学习Spring源码系列(一)——Bean注入流程

    作者:京东科技 韩国凯 通过本文,读者可以0源码基础的初步学习spring源码,并能够举一反三从此进入源码世界的大米! 由于是第一次阅读源码,文章之中难免存在一些问题,还望包涵指正! 一. @Auto ...

  10. python判断密码连续,重复,大小写、数字、符号混合密码复杂度要求

    一.python 判断密码连续,重复,大小写.数字.符号混合密码复杂度要求 1. 运行环境 python 3.6.8 2. 密码必须包含大小写.数字.特殊符号中的3种且长度为8-16位 def ver ...