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# 数据结构基础-实现循环队列
队列 队列的概念是先进先出,这个应该不用多说了.看下面那个从网上找的现成图片. 循环队列 循环队列在逻辑上将队列中的数据摆成环形,如下图: 下面直接上代码. 队列 队列的概念是先进先出 ...
随机推荐
- eclipse启动一个Springboot项目
1.准备一个Springboot项目 2.配置好maven 注:本地的maven-repository默认路径是在系统盘的.m文件夹.如果想要修改可参考: eclipse修改maven仓库的位置_本本 ...
- Redis-03 Redis事务
需要特别注意,Redis 的命令是原子性的,而 Redis 的事务是非原子性的 事务相关命令 MULTI 命令 开启事务命令,Redis将操作命令逐个放到队列中,根据EXEC命令来原子化执行命令 EX ...
- Hadoop详解(04)-Hdfs
Hadoop详解(04)-Hdfs HDFS概述 HDFS产出背景及定义 背景:随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需 ...
- 震网(Stuxnet)病毒深度解析:首个攻击真实世界基础设施的病毒
摘要:震网病毒主要是通过改变离心机的转速,来破坏离心机,并影响生产的浓缩铀质量. 本文分享自华为云社区<[安全技术]震网(Stuxnet)病毒深度解析:首个攻击真实世界基础设施的病毒(1)[原创 ...
- Axure 环境进度条
步骤一:拖拉摆放好相关控件 1.4个半圆环,一个白色上半圆环 (上白),一个白色下半圆环 (下白),一个灰色上半圆环 (上灰),一个灰色下半圆环 (下灰),排放层次为: 下灰<下白<上灰& ...
- 用溪流 WarKey 辅助红警开局快捷操作
背景 自从发现红警除了 ddraw 补丁可以在最新的系统里玩后,就开始怀旧了.但是由于手残,遇到别人抢地盘基本上直接崩了.偶然有一次发现像 08 这样的高手点 30 个坦克使用工具的.那么,我开局用工 ...
- 安装部署Java项目
开头:之前做了个文档转换的小项目,想部署在安卓手机上,自己可以随时看看,所以才有了下面这篇文章,内容或有瑕疵,望请批正.文末放我自己部署文档转换网址,仅供大家参考,谢谢! 选择:Termux 还是 L ...
- CF1779C Least Prefix Sum 题解
CF链接:Least Prefix Sum Luogu链接:Least Prefix Sum $ {\scr \color {CornflowerBlue}{\text{Solution}}} $ 先 ...
- Hash table集合-练习_计算一个字符串中每个字符出现次数
Hash table集合 java.util.Hashtable<K,V>集合implements Map<K,V>接口Hashtable:底层也是一个哈希表,是一个线程安全的 ...
- Unity之Android端权限申请
Unity之Android端权限申请 Unity之Android端权限申请 前言 开篇废话 Unity版本 正题 前期准备 挂载脚本 打包发布 安装App 查看结果 结尾 唠家常 今日无推荐 Unit ...