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# 数据结构基础-实现循环队列
队列 队列的概念是先进先出,这个应该不用多说了.看下面那个从网上找的现成图片. 循环队列 循环队列在逻辑上将队列中的数据摆成环形,如下图: 下面直接上代码. 队列 队列的概念是先进先出 ...
随机推荐
- HBase详解(03) - HBase架构和数据读写流程
RegionServer 架构 每个RegionServer可以服务于多个Region 每个RegionServer中有多个Store, 1个WAL和1个BlockCache 每个Store对应一个列 ...
- 腾讯出品小程序自动化测试框架【Minium】系列(二)项目配置及测试套件使用说明
一.写在前面 真的人这一散漫惯了,收心就很难了,上午把小程序开发环境启动后,在QQ游戏里,杀了三把象棋,5把2D桌球,一上午没了,还是没法心静下来去学点东西. 那就老样子,逼着自己开始,找到 &quo ...
- echarts系列-带图教你调整左右位置x轴样式网格虚线刻度居中双轴Y轴滚动上下移动文字旋转改分割线颜色部分字体改色折注混合,X轴的颜色,X轴字体颜色,调整柱子颜色,调整小图标图例的大小和位置,鼠标hover时候的样式,用纵向阴影
上面先说注意事项 1.如果使用show hidden控制图表显示隐藏,某些切换效果很奇怪,比如饼图,会从左上角开始放大,很丑,这个时候我们可以设置其宽高来解决问题,给其设置宽高后,切换的奇怪效果即可消 ...
- Vue 父组件传值给子组件,对象数组类型,父组件直接调用子组件方法,会是上次的引用地址,vue 父子组件传值数据不能实时更新问题
vue 父子组件传值数据不能实时更新问题 解决方案一: 在子组件进行深度监听,然后监听里调用方法就可以了 父组件测试代码 <WranList ref="myEMChartRef2&qu ...
- vue修改内容点击显示隐藏内容不自动刷新问题
今天遇到一个在card组件中点击显示隐藏的问题,修改了动态绑定的值,但是组件内容没有刷新,但是偶而其他元素修改导致页面动态刷新又刷新了,就猜想修改这个数组中一个对象的值并没有引起vue的动态刷新 解决 ...
- 在线程里使用线程外的变量为什么一定要是final类型
public class CyclicBarrierDemo { public static void main(String[] args) { /* * 七龙珠 * */ CyclicBarrie ...
- 网络通讯协议分类-IP地址
网络通讯协议分类 通信的协议还是比较复杂的,java.net包中包含的类和接口,它们提供低层次的通信细节.我们可以直接使用这些类和接口,来专注于网络程序开发,而不用考虑通信的细节. java.net包 ...
- WordPress4.6任意命令执行漏洞
前言 WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站.也算是一个内容管理系统(CMS) 环境搭建 docker环 ...
- Quartz帮助类
#region 帮助类 public class QuarztHelper { #region 字段 /// <summary> /// 调度器 /// </summary> ...
- JavaScript所有内部属性列表 [[Configurable]] 等
简介 据MDN文档所说内部属性是由 [[···]] 包裹的内容,于是我们去复制 ECMA-262 标准的所有文字部分,然后用正则统计 [[···]] 的出现并打印 效果 代码 经老大提醒,这里的正则并 ...