// 链式结构:表示队列
typedef struct QListNode
{
struct QListNode* _next;
QDataType _data;
}QNode;
// 队列的结构
typedef struct Queue
{
QNode* _front;
QNode* _rear;
}Queue;
// 初始化队列
void QueueInit(Queue* q);
// 队尾入队列
void QueuePush(Queue* q, QDataType data);
// 队头出队列
void QueuePop(Queue* q);
// 获取队列头部元素
QDataType QueueFront(Queue* q);
// 获取队列队尾元素
QDataType QueueBack(Queue* q);
// 获取队列中有效元素个数
int QueueSize(Queue* q);
// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
int QueueEmpty(Queue* q);
// 销毁队列
void QueueDestroy(Queue* q);
#include"Queue.h"
QNode* BuyQueueNode(QDataType x)
{
QNode* cur = (QNode*)malloc(sizeof(QNode));
cur->_data = x;
cur->_next = NULL;
return cur;
}
void QueueInit(Queue* q)
{
q->_front = NULL;
q->_rear = NULL;
}
void QueuePush(Queue* q, QDataType data)
{
QNode* cur = BuyQueueNode(data);
if (q->_front == NULL)
{
q->_front = q->_rear = cur;
}
else
{
q->_rear->_next = cur;
q->_rear = cur;
}
}
void QueuePop(Queue* q)
{
if (q->_front == NULL)
{
return;
}
else
{
QNode* tmp = q->_front->_next;
free(q->_front);
q->_front = tmp;
}
}
QDataType QueueFront(Queue* q)
{
return q->_front->_data;
}
QDataType QueueBack(Queue* q)
{
return q->_rear->_data;
}
int QueueSize(Queue* q)
{
QNode* cur;
int count = 0;
for (cur = q->_front; cur;cur = cur->_next)
{
count++;
}
return count;
}
int QueueEmpty(Queue* q)
{
return q->_front == NULL;
}
void QueueDestroy(Queue* q)
{
if (q->_front == NULL)
{
return;
}
while (q->_front)
{
QueuePop(q);
}
}
void QueuePrintf(Queue* q)
{
if (q->_front == NULL)
{
return;
}
QNode* cur;
for (cur = q->_front; cur; cur = cur->_next)
{
printf("%d ", cur->_data);
}
printf("\n");
}