#include<stdio.h>
#include <iostream>
using namespace std;
typedef struct Qnode {
int data;
struct Qnode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
} LinkQueue;
bool InitQueue(LinkQueue &Q) {
Q.front = Q.rear = new QNode;
Q.front->next = NULL;
return true;
}
bool DestoryQueue(LinkQueue &Q) {
while (Q.front) {
QNode *p = Q.front->next;
delete Q.front;
Q.front = p;
}
return true;
}
bool EnQueue(LinkQueue &Q, int e) {
QNode *p = new QNode;
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
Q.rear = p;
return true;
}
bool DeQueue(LinkQueue &Q, int &e) {
if (Q.front == Q.rear)
return false;
QNode *p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
delete p;
return true;
}
int GetHead(LinkQueue Q) {
if (Q.front != Q.rear)
return Q.front->next->data;
else {
return 0;
}
}
int main() {
LinkQueue Q;
cout << "链队的初始化:" << endl;
InitQueue(Q);
cout << "链队列创建成功" << endl;
cout << "链队列的入队" << endl;
int i = 0;
for (i = 0; i < 10; i++) {
EnQueue(Q, i);
}
cout << "链队入队成功" << endl;
cout << "取队头元素" << endl;
cout << GetHead(Q) << endl;
cout << "链队出队" << endl;
for (i = 0; i < 10; i++) {
int k;
DeQueue(Q, k);
cout << k << " ";
}
cout << endl;
cout << "销毁链队" << endl;
DestoryQueue(Q);
cout << "链队销毁成功" << endl;
return 0;
}