操作介绍:
1、创建一个链式队列
2、入队一个元素
3、出队一个元素
4、获取队首元素
5、清空队列
6、判断队列是否为空
7、求队列长度
8、输出当前的队列
9、退出操作系统
#include<windows.h>
#include<iostream>
using namespace std;
typedef struct QNode //结点结构
{
int data;
struct QNode *next;
}QNode, *QPtr;
typedef struct
{
QPtr front; //队首指针
QPtr rear; //队尾指针
}LinkQueue;
//函数声明
//创建一个链式队列
LinkQueue InitQueue()
{
LinkQueue Q;
Q.front = Q.rear = (QPtr)malloc(sizeof(QNode));
if (Q.front == NULL)
{
cout << "error"; //存储分配失败
exit(0);
}
int n, i;
cout << "请输入你希望队列元素的个数:";
cin >> n;
if (n == 0)cout << endl;
else
{
cout << "请输入" << n << "个队列元素:";
for (i = 0; i < n; i++)
{
QPtr p;
p = (QPtr)malloc(sizeof(QNode));
p->next = NULL;
cin >> p->data;
Q.rear->next = p;
Q.rear = p;
}
}
return Q;
}
//输出链式队列
void putQueue(LinkQueue Q)
{
cout << "当前队列为:";
if (Q.front == Q.rear)
{
cout << "队列为空"<<endl;
}
else
{
QPtr p;
p = Q.front->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
}
//入队一个元素
LinkQueue EnQueue(LinkQueue Q)
{
int e;
cout << "请输入入队元素:";
cin >> e;
QPtr p;
p = (QPtr)malloc(sizeof(QNode));
p->next = NULL;
p->data = e;
Q.rear->next = p;
Q.rear = Q.rear->next;
return Q;
}
//出队一个元素
LinkQueue DeQueue(LinkQueue Q)
{
QPtr p;
if (Q.front == Q.rear)
cout << "队空,无法完成出队操作";
p = Q.front->next;
Q.front->next = p->next;
free(p);
return Q;
}
//获取队首元素
void GetfirstQueue(LinkQueue Q)
{
if (Q.front == Q.rear)
cout << "队空,无法完成获取队首元素操作";
else
{
cout << "队首元素为:";
cout << Q.front->next->data;
}
cout << endl;
}
//清空队列
LinkQueue ClearQueue(LinkQueue Q)
{
while (Q.front->next != Q.rear)
{
QPtr p;
p = Q.front->next;
Q.front->next = p->next;
free(p);
}
while(Q.front->next == Q.rear)
{
QPtr p;
p = Q.front->next;
p->next = NULL;
Q.rear = Q.front;
Q.front->next = NULL;
free(p);
}
return Q;
}
//判断队列是否空为空
void JudgeQueue(LinkQueue Q)
{
if (Q.front == Q.rear)cout << "队空"<<endl;
else cout << "队列不为空"<<endl;
}
//求队列长度
void GetQueuelength(LinkQueue Q)
{
int num = 0;
if (Q.front == Q.rear)num = 0;
QPtr p;
p = Q.front->next;
while (p)
{
p = p->next;
num++;
}
cout << "队列长度为:" << num << endl;
}
int main()
{
int m;
LinkQueue Q;
while (1)
{
Sleep(1000);
cout << "*********操作介绍*********" << endl;
cout << " 1、创建一个链式队列 " << endl;
cout << " 2、入队一个元素 " << endl;
cout << " 3、出队一个元素 " << endl;
cout << " 4、获取队首元素 " << endl;
cout << " 5、清空队列 " << endl;
cout << " 6、判断队列是否空为空 " << endl;
cout << " 7、求队列长度 " << endl;
cout << " 8、输出链式队列 " << endl;
cout << " 9、退出操作系统 " << endl;
cout << "**************************" << endl;
cout << "请输入你的操作代号:";
cin >> m;
switch (m)
{
case 1:
Q = InitQueue();
break;
case 2:
Q=EnQueue(Q);
break;
case 3:
Q=DeQueue(Q);
break;
case 4:
GetfirstQueue(Q);
break;
case 5:
Q=ClearQueue(Q);
break;
case 6:
JudgeQueue(Q);
break;
case 7:
GetQueuelength(Q);
break;
case 8:
putQueue(Q);
break;
}
if (m == 9)break;
}
while (1);
return 0;
}