#include "iostream"
using namespace std;
typedef struct QNode{
int data;
QNode *next;
}QNode,*QueuePtr;
typedef struct LinkQueue{
QNode* front;
QNode* rear;
}LinkQueue;
void InitQueue(LinkQueue &Q);
void EnQueue(LinkQueue &Q,int element);
void DeQueue(LinkQueue &Q);
void DestoryQueue(LinkQueue &Q);
void main(){
LinkQueue linkQueue;
InitQueue(linkQueue);
for (int i = 0;i<3;i++)
{
EnQueue(linkQueue,i);
}
for (int i = 0;i<3;i++)
{
DeQueue(linkQueue);
}
for (int i = 0;i<3;i++)
{
EnQueue(linkQueue,i);
}
DestoryQueue(linkQueue);
}
void InitQueue(LinkQueue &Q){
Q.front=Q.rear = (QNode*)malloc(sizeof(QNode));
if (!Q.rear)
{
exit(0);
}
Q.front->next = NULL;
};
void EnQueue(LinkQueue &Q,int element){
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if (!Q.rear)
{
exit(0);
}
p->data = element;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
void DeQueue(LinkQueue &Q){
if (Q.front==Q.rear)
{
exit(0);
}
QueuePtr p = Q.front->next;
cout<<p->data<<endl;
Q.front->next = p->next;
//队列中只有一个节点时
if (Q.rear==p)
{
Q.rear = Q.front;
}
free(p);
}
void DestoryQueue(LinkQueue &Q){
while(Q.front){
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
}