复制代码 代码如下:
#include
#include
#include
#include
#include "DynaLnkQueue.h"
bool InitQueue(linkQueue *Q)
{
Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q->front)
return false;
Q->front->next = NULL;
return true;
}
void DestroyQueue(linkQueue *Q)
{
while(Q->front)
{
Q->rear = Q->front->next;
free(Q->front);
Q->front = Q->rear;
}
}
bool QueueEmpty(linkQueue Q)
{
if(Q.front == Q.rear)
return true;
return false;
}
int QueueLength(linkQueue Q)
{
ElemType count=0;
QueuePtr p = Q.front->next;
while(p->next != NULL)
{
++count;
p = p->next;
}
return count;
}
bool GetHead(linkQueue Q, ElemType *e)
{
if(QueueEmpty(Q) == false)
{
e = &Q.front->next->data;
return true;
}
return false;
}
void QueueTraverse(linkQueue Q, void (*fp)(ElemType))
{
QueuePtr p = Q.front->next;
while(p->next != NULL)
{
visit(p->data);
p = p->next;
}
}
void ClearQueue(linkQueue *Q)
{
ElemType x=0;
while(Q->front != Q->rear)
{
DeQueue(Q,&x);
Q->front = Q->front->next;
}
}
bool EnQueue(linkQueue *Q, ElemType e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if(!p)
return false;
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
return true;
}
bool DeQueue(linkQueue *Q, ElemType *e)
{
QueuePtr p;
if(Q->front == Q->rear)
return false;
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if(Q->rear == p)
Q->rear = Q->front;
free(p);
return true;
}



