假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素站点(注意不设头指针) ,试编写相应的置空队、判队空 、入队和出队等算法。
时间: 2023-05-18 15:04:30 浏览: 155
以下是带头结点的循环链表队列的算法实现:
1. 置空队
void InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
Q.front->next = Q.front;
}
2. 判队空
Status QueueEmpty(LinkQueue Q)
{
if(Q.front == Q.rear)
return TRUE;
else
return FALSE;
}
3. 入队
Status EnQueue(LinkQueue &Q, QElemType e)
{
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if(!p)
exit(OVERFLOW);
p->data = e;
p->next = Q.rear->next;
Q.rear->next = p;
Q.rear = p;
return OK;
}
4. 出队
Status DeQueue(LinkQueue &Q, QElemType &e)
{
if(Q.front == Q.rear)
return ERROR;
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear == p)
Q.rear = Q.front;
free(p);
return OK;
}
注意:以上算法实现中,Q.front 和 Q.rear 分别指向队头和队尾结点,且 Q.front 指向的结点为头结点,不存储数据。
阅读全文