C++实现顺序队列(循环队列)相关操作代码
#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++实现顺序队列(循环队列)相关操作代码的更多相关文章
- 用数组实现队列(顺序队列&循环队列)
用数组实现队列(顺序队列&循环队列) 顺序队列 ️ 队列(先进先出) 几个问题: 队列方法:入队.出队 队列的存储:即队首队尾两个指针, 扩容:如果队列容量不够了,应该扩容,如果队尾没有位置了 ...
- Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列
Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...
- c数据结构 顺序表和链表 相关操作
编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...
- java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作
项目源码下载:http://download.csdn.net/detail/liangrui1988/6720047 效果图: 相关代码: test1 package com.mail; impor ...
- Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法
前言 队列和栈非常类似,前面已经讲过了栈的实现与用法,现在我们来说说队列. 队列介绍 队列遵循FIFO(First In First Out,先进先出)原则的一组有序的项. 队列是一种特殊的线性表,特 ...
- 队列(循环队列)----C语言
线性结构:有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构 非线性结构:不满足线性结构的数据结构 队列 队列一般分为两类:链式队列和顺序队列 链式队列---链式队列即用链表 ...
- Java数据结构——循环队列
普通顺序队列存在的问题在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位.出队时,则是头指针front后移一个单位.像这样进行了一定数量的入队和出队操作后, ...
- TypeScript算法与数据结构-队列和循环队列
本文涉及的源码,均在我的github.有两部分队列和循环队列.有问题的可以提个issue,看到后第一时间回复 1. 队列(Queue) 队列也是一种线性的数据结构, 队列是一种先进先出的数据结构.类似 ...
- 数据结构-循环队列(Python实现)
今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删 ...
- C# 数据结构基础-实现循环队列
队列 队列的概念是先进先出,这个应该不用多说了.看下面那个从网上找的现成图片. 循环队列 循环队列在逻辑上将队列中的数据摆成环形,如下图: 下面直接上代码. 队列 队列的概念是先进先出 ...
随机推荐
- (4)go-micro微服务proto开发
目录 一 Protobuf介绍 二 安装Protobuf 三 Protobuf语法 1.1 基本规范 1.2 字段规则 1.3 service如何定义 1.4 Message如何定义 四 proto代 ...
- TensorRT基础笔记
一,概述 TensorRT 是 NVIDIA 官方推出的基于 CUDA 和 cudnn 的高性能深度学习推理加速引擎,能够使深度学习模型在 GPU 上进行低延迟.高吞吐量的部署.采用 C++ 开发,并 ...
- Qt界面设计--侧边栏隐藏和滑出
在日常项目中,界面布局上经常使用到侧边栏的方式,在侧边栏放置控件进行复合使用,可以实现子功能界面的隐藏和滑出,效果展示如下: 界面控件很简单,主界面QWidget,侧边栏也用一个QWidget和一个按 ...
- 02-RTL代码分析思路
RTL代码分析思路(这里不进行具体代码的分析) verilog文件是以.v结尾的 1 RTL代码示例 //Date : 2023-01-09 //E-mail : xxxxxx@163.com //c ...
- 加速 Document AI (文档智能) 发展
在企业的数字工作流中充满了各种文档,包括信件.发票.表格.报告.收据等,我们无法自动提取它们的知识.如今随着文本.视觉和多模态人工智能的进步,我们有可能解锁这些知识,这篇文章向你展示了你的团队该如何使 ...
- DVWA靶场实战(十一)——XSS(Reflected)
DVWA靶场实战(十一) 十一.XSS(Reflected): 1.漏洞原理: XSS被称为跨站脚本攻击(Cross Site Script),而Reflected被称作反射型XSS.不同于DOM和S ...
- Translent关键字-InvalidClassException异常_原理和解决方案
Translent关键字 static关键字:静态关键字静态优先于非静态加载到内存中(静态优先于对象进入到内存中)被static修饰的成员变量不能被序列化的,序列化的都是对象private stati ...
- 结构型模式 - 桥接模式Bridge
学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 桥接模式的定义与特点 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化.它是用组合关系代替继承关系来实现 ...
- Solon v2.0 大版本发布。提效率!降成本!
一个高效的 Java 应用开发框架:更快.更小.更简单.不是 Spring,没有 Servlet,也无关 JavaEE:新兴独立的开放生态.主框架仅 0.1 MB. 150来个生态插件,覆盖各种不同的 ...
- 12月12日内容总结——Django之数据增删改查、Django请求生命周期流程图、Django路由层(路由匹配、转换器、正则匹配)、反向解析
目录 一.可视化界面之数据增删改查 二.django请求生命周期流程图 三.django路由层 1.路由匹配 2.转换器 3.正则匹配 不同版本的区别 正则匹配斜杠导致的区别 4.正则匹配的无名有名分 ...