队列的创建
Status InitQueue(LinkQueue &Q)
{
if(!(Q.front = Q.rear = (QueuePtr)malloc(QNode)))
exit(OVERFLOW);
Q.front->next = NULL;
return OK;
}
队列的销毁
Status DestroyQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear = Q.front->next;
free(Q.front)
Q.front = Q.rear;
return OK;
}
}
清空队列
Status ClearQueue(LinkQueue &Q)
{
QueuePtr p,q;
Q.rear = Q.front;
p = Q.front->next;
while(p)
{
q = p;
free(p);
p = q->next;
}
return OK;
}
判断队列是否为空
Status QueueEmpty(LinkQueue Q)
{
if(Q.front == Q.rear)
return TRUE;
else
return FALSE;
}
计算队列的长度
Status QueueLength(LingkQueue Q)
{
int i;
QueuePtr p;
p = Q.front;
while(p!=Q.rear)
{
i++;
p = p->next;
}
return i;
}
队头元素的获取
Status GetHead(LinkQueue Q,QElemType &e)
{
QueuePtr p;
if(Q.front == Q.rear)
return ERROR;
p = Q.front->next; // Q.front->data 为空
e = p->data;
return OK;
}
队尾的插入
Status EnQueue(LinkQueue &Q,QElemType e)
{
QueuePtr p;
if(!(p=(QueuePtr)malloc(sizeof(QNode))))
exit(OVERFLOW);
p->data = e;
Q.rear->next = p;
Q.rear = q;
Q.rear->next = NULL:
}
队头的删除
Status DeQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
if(Q.front == Q.rear)
return ERROR;
p = Q.front->next;
e = p->data;
Q.front->next->next = p->next;
if(p==Q.rear)
Q.rear = Q.front;
free(p);
return OK;
}