C++循环队列的基本操作
#include<iostream>
using namespace std;
#define MAXSIZE 10
typedef int QueueElemType;
typedef struct
{
QueueElemType elem[MAXSIZE];
int front;
int rear;
}SeqQueue;
void InitQueue(SeqQueue &Q);
void Clear(SeqQueue &Q);
bool Isempty(SeqQueue Q);
bool Isfull(SeqQueue Q);
void EnQueue(SeqQueue &Q, QueueElemType e);
void DelQueue(SeqQueue &Q, QueueElemType &e);
void Gethead(SeqQueue Q, QueueElemType &e);
void Input(SeqQueue &Q);
void Output(SeqQueue Q);
void Interface();
int main()
{
Interface();
SeqQueue Q;
int n;
while (1)
{
cout << "请输入操作序号:";
cin >> n;
switch (n)
{
case 1:
{
InitQueue(Q);
break;
}
case 2:
{
Clear(Q);
break;
}
case 3:
{
if (Isempty(Q))
{
cout << "队列为空!" << endl;
}
else
{
cout << "队列不为空!" << endl;
}
break;
}
case 4:
{
if (Isfull(Q))
{
cout << "队列已满!" << endl;
}
else
{
cout << "队列未满!" << endl;
}
break;
}
case 5:
{
QueueElemType e;
cout << "请输入入队列元素:";
cin >> e;
EnQueue(Q, e);
break;
}
case 6:
{
QueueElemType e;
DelQueue(Q, e);
cout << "元素" << e << "已出队列!" << endl;
break;
}
case 7:
{
QueueElemType e;
Gethead(Q, e);
cout << "队头元素为:" << e << endl;
break;
}
case 8:
{
cout << "请依次输入数据,并以-1作为结束标记:" << endl;
Input(Q);
break;
}
case 9:
{
cout << "队列中的元素:" << endl;
Output(Q);
break;
}
case 10:
{
Interface();
break;
}
case 0:
{
exit(0);
break;
}
default:
{
cout << "输入的操作序号不正确!请核对..." << endl;
}
}
}
return 0;
}
void InitQueue(SeqQueue &Q)
{
Q.front = Q.rear = 0;
}
void Clear(SeqQueue &Q)
{
Q.front = Q.rear = 0;
}
bool Isempty(SeqQueue Q)
{
if (Q.rear == Q.front)
{
return true;
}
else
{
return false;
}
}
bool Isfull(SeqQueue Q)
{
if ((Q.rear + 1) % MAXSIZE == Q.front)
{
return true;
}
else
{
return false;
}
}
void EnQueue(SeqQueue &Q, QueueElemType e)
{
if (Isfull(Q))
{
cout << "队列已满!" << endl;
}
else
{
Q.elem[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXSIZE;
}
}
void DelQueue(SeqQueue &Q, QueueElemType &e)
{
if (Isempty(Q))
{
cout << "队列为空!" << endl;
}
else
{
e = Q.elem[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;
}
}
void Gethead(SeqQueue Q, QueueElemType &e)
{
if (Isempty(Q))
{
cout << "队列为空!" << endl;
}
else
{
e = Q.elem[Q.front];
}
}
void Input(SeqQueue &Q)
{
int e;
while (1)
{
cin >> e;
if (e == -1)
{
break;
}
EnQueue(Q, e);
}
}
void Output(SeqQueue Q)
{
if (Isempty(Q))
{
cout << "队列为空!" << endl;
}
else
{
for (int i = Q.front; i < Q.rear; i++)
{
cout << Q.elem[i] << " ";
}
cout << endl;
}
}
void Interface()
{
cout << "***************欢迎使用循环队列系统***************" << endl;
cout << "1:初始化循环队列 2:清空循环队列" << endl;
cout << "3:判断循环队列是否为空 4:判断循环队列是否已满" << endl;
cout << "5:入队列 6:出队列" << endl;
cout << "7:获取队列顶元素 8:输入循环队列" << endl;
cout << "9:输出循环队列 10:菜单" << endl;
cout << "0:退出" << endl;
cout << "*************************************************" << endl;
cout << "输入0-10之间的数:" << endl;
}