#include <iostream>
#include <Windows.h>
using namespace std;
#define MAXSIZE 6
typedef int QElemType;
typedef struct {
QElemType* base;//基地址
int rear;//尾指针
int front;//头指针
}LoopQueue;
//初始化循环队列
bool InitList(LoopQueue &queue) {
queue.base = new int[MAXSIZE];
if (!queue.base)return false;
queue.front = queue.rear = 0;
return true;
}
//入队
bool InsertQueue(LoopQueue& queue, QElemType e) {
if ((queue.rear + 1) % MAXSIZE == queue.front) {
cout << "队列已满,无法入队!" << endl;
return false;
}
queue.base[queue.rear] = e;
queue.rear = (queue.rear + 1) % MAXSIZE;
return true;
}
//打印队列
bool PrintQueue(LoopQueue& queue) {
if (queue.front == queue.rear) {
cout << "队列为空,无法打印队列!" << endl;
return false;
}
int i = queue.front;
while (queue.front != queue.rear && (i + MAXSIZE) % MAXSIZE != queue.rear)
{
cout << queue.base[i] << " ";
i++;
}
cout << endl;
return true;
}
//获取头结点
int getHead(LoopQueue& queue) {
return queue.base[queue.front];
}
//获取尾结点
int getBack(LoopQueue& queue) {
return queue.base[queue.rear-1];
}
//获取队列的长度
int getLength(LoopQueue& queue) {
return (queue.rear - queue.front + MAXSIZE) % MAXSIZE;
}
//出队
bool DeleteQueue(LoopQueue& queue, QElemType&e) {
if (queue.front == queue.rear) {
cout << "队列为空,无法出队!" << endl;
return false;
}
e = queue.base[queue.front];
queue.front = (queue.front + 1) % MAXSIZE;
return true;
}
//销毁队列
void DestroyQueue(LoopQueue& queue) {
if (queue.base) {
delete queue.base;
}
queue.base = NULL;
queue.front = queue.rear = 0;
}
//清空队列
void ClearQueue(LoopQueue& queue) {
queue.front = queue.rear = 0;
}
void show_menu() {
cout << "----------------循环队列的基本操作--------------\t" << endl;
cout << "\t\t1.初始化循环队列" << endl;
cout << "\t\t2.入队" << endl;
cout << "\t\t3.获取队列的头结点" << endl;
cout << "\t\t4.获取队列的尾结点" << endl;
cout << "\t\t5.获取队列的长度" << endl;
cout << "\t\t6.出队" << endl;
cout << "\t\t7.打印队列" << endl;
cout << "\t\t8.清空队列" << endl;
cout << "\t\t0.退出系统" << endl;
}
int main() {
LoopQueue queue;
int choose = -1;
bool flag = -1;
int e = 0;
int elem = 0;
show_menu();
while (flag) {
cout << "请选择:";
cin >> choose;
switch (choose)
{
case 1:
if (InitList(queue)) {
cout << "队列初始化成功!" << endl;
break;
}
else {
cout << "队列初始化失败!" << endl;
break;
}
case 2:
cout << "请输入要插入的元素:";
cin >> e;
if (InsertQueue(queue, e)) {
cout << "元素 " << e << " 插入成功!" << endl;
break;
}
else {
cout << "元素 " << e << " 插入失败!" << endl;
break;
}
case 3:
cout << "队列的头结点为:" << getHead(queue) << endl;
break;
case 4:
cout << "队列的尾结点为:" << getBack(queue) << endl;
break;
case 5:
cout << "队列的长度为:" << getLength(queue) << endl;
break;
case 6:
if (DeleteQueue(queue, elem)) {
cout << "元素 " << elem << " 出队成功!" << endl;
break;
}
else {
cout << "元素出队失败!" << endl;
break;
}
case 7:
PrintQueue(queue);//打印队列
break;
case 8:
ClearQueue(queue);
cout << "清空队列元素!" << endl;
break;
default:
flag = 0;
}
}
DestroyQueue(queue);//销毁队列
system("pause");
return 0;
}

最新文章

  1. [转]中国最大的Webshell后门箱子调查,所有公开大马全军覆没
  2. zk 隐藏网页文件后缀
  3. Magic skills of vim from zhihu
  4. Global &amp; Local Variable in Python
  5. The Angles of a Triangle
  6. CentOS6.3下搭建vsftpd(采用虚拟用户设置)
  7. java中的object类
  8. Mac_Sublime Text3(mac)一些插件和快捷键
  9. Linux串口通信之termios结构体说明
  10. Vue.js 入门教程
  11. python爬虫之pyquery学习
  12. 使用Genymotion模拟器调试出现INSTALL_FAILED_CPU_ABI_INCOMPATIBLE错误的解决办法
  13. node.js获取url中的各个参数
  14. Kettle转换或作业乱码
  15. 测试x264编码器的低延时编码和非延时编码
  16. 【PHP】使用openssl进行Rsa长数据加密(117)解密(128)
  17. WebStorm mac下如何安装WebStorm + 破解
  18. ClamAV资料链接
  19. MySql 双实例安装
  20. 简单瞎搞题(bitset的操作)

热门文章

  1. webpackHotMiddleware改造成koa支持的中间件
  2. 洛谷P4342 [IOI1998]Polygon
  3. Jupyter + Miniconda + VsCode 学习利器
  4. echars简单使用
  5. E. Permutation Game
  6. 机器学习——常见的backbone
  7. PostScript语言教程(六、图形变换)
  8. 20192305 王梓全Python程序设计实验四报告
  9. 查看linux机器上的cpu个数
  10. infoq上看视频1(持续更新)