#include <stdio.h>
#include <iostream>
using namespace std;
typedef int SElemType;
struct Node
{
SElemType data;
struct Node* next;
};
typedef struct {
Node* front;
Node* rear;
}LinkQueue;
//初始化队列
bool InitQueue(LinkQueue* &queue)
{
queue = new LinkQueue();
if(!queue)
{
return false;
}
queue->front = NULL;
queue->rear = NULL;
return true;
}
//入队列
void EnQueue(LinkQueue* &queue,SElemType e)
{
Node* node = new Node();
node->data = e;
node->next = NULL;
//如果队列为空
if(queue->rear == NULL)
{
queue->front = node;
queue->rear = node;
}
else//如果队列不为空
{
queue->rear->next = node;
queue->rear = node;
}
}
//出队列
SElemType DeQueue(LinkQueue* &queue)
{
if(queue->front == NULL)
{
return -1;
}
else
{
SElemType elem;
Node* node = queue->front;
elem = node->data;
if(queue->front->next == NULL)
{
queue->front = NULL;
queue->rear = NULL;
}
else
{
queue->front = queue->front->next;
}
delete node;
return elem;
}
}
//获得队列头元素
SElemType GetHead(LinkQueue* &queue)
{
if(queue->front!=NULL)
{
return queue->front->data;
}
else
return -1;
}
//判断队列空
bool empty(LinkQueue* &queue)
{
if(queue->front == NULL)
return true;
else
return false;
}
//求队列长度
int QueueLength(LinkQueue* &queue)
{
int i = 0;
Node* p = queue->front;
while(p!=NULL)
{
i++;
p = p->next;
}
return i;
}
//清空队列
void ClearQueue(LinkQueue* &queue)
{
if(queue->front == NULL)
{
return;
}
else
{
Node* p = queue->front;
Node* q = p->next;
while(q)
{
delete p;
p = NULL;
p = q;
q = q->next;
}
delete p;
p = NULL;
queue->front = NULL;
queue->rear = NULL;
}
}
//销毁队列
void DestroyQueue(LinkQueue* &queue)
{
ClearQueue(queue);
delete queue;
queue = NULL;
}
//显示队列
void PrintQueue(LinkQueue* &queue)
{
Node* p = queue->front;
while(p)
{
cout<<p->data<< " ";
p = p->next;
}
cout << endl;
}
void main()
{
LinkQueue* queue;
InitQueue(queue);
EnQueue(queue,3);
EnQueue(queue,4);
EnQueue(queue,5);
PrintQueue(queue);
cout<< GetHead(queue) << endl;
cout<< DeQueue(queue) << endl;
DestroyQueue(queue);
}