#include "bits/stdc++.h"
using namespace std;
#define MAXQSIZE 100
#define OK 0
#define ERROR -1
typedef struct QNode {
int data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
} LinkQueue;
int InitQueue(LinkQueue &Q) {
Q.front = Q.rear = (QueuePtr) malloc(sizeof(QNode));
if (Q.front == NULL) {
cout << "循环队列初始化失败" << endl;
return ERROR;
} else {
Q.front->next = NULL;
cout << "循环队列初始化成功" << endl;
return OK;
}
}
int DestroyQueue(LinkQueue &Q) {
while (Q.front != NULL) {
QNode *p = Q.front->next;
free(Q.front);
Q.front = p;
}
cout << "循环队列销毁完毕" << endl;
return OK;
}
int EnQueue(LinkQueue &Q, int e) {
QueuePtr p = (QueuePtr) malloc(sizeof(QNode));
if (p == NULL) {
cerr << "入队失败" << endl;
return ERROR;
}
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
cout << "入队成功" << endl;
return OK;
}
int GetHead(LinkQueue Q) {
if (Q.front == Q.rear) {
cerr << "取队头失败" << endl;
return ERROR;
}
int e = Q.front->next->data;
return e;
}
int DeQueue(LinkQueue &Q) {
if (Q.front == Q.rear) {
cerr << "出队失败" << endl;
return ERROR;
}
struct QNode *p = Q.front->next;
Q.front->next = p->next;
if (Q.rear == p) {
Q.rear = Q.front;
}
delete p;
cout << "出队成功" << endl;
return OK;
}
int main() {
LinkQueue Q;
InitQueue(Q);
int choice;
do {
cout << "1.链队销毁" << endl;
cout << "2.入队" << endl;
cout << "3.出队" << endl;
cout << "4.获取队头元素" << endl;
cout << "**********************" << endl;
cout << "请输入您的选择:" << endl;
cin >> choice;
switch (choice) {
case 1: {
DestroyQueue(Q);
break;
}
case 2: {
int e;
cout << "请输入您要入队的元素" << endl;
cin >> e;
EnQueue(Q, e);
break;
}
case 3: {
DeQueue(Q);
break;
}
case 4: {
int e = GetHead(Q);
cout << "队头元素为:" << e << endl;
break;
}
default: {
exit(ERROR);
}
}
} while (1);
return 0;
}