C语言实现循环链表队列 (无头指针)
C语言实现循环链表队列 (无头指针)
本文使用C语言实现一个基于带头结点的循环链表的队列数据结构,该队列仅使用一个指针指向队尾元素结点,没有头指针。
1. 队列的初始化
void initQueue(LinkList &rear) {
rear = (LinkList)malloc(sizeof(LNode));
rear->next = rear;
}
2. 入队列
void enQueue(LinkList &rear, ElemType x) {
LinkList p = (LinkList)malloc(sizeof(LNode));
p->data = x;
p->next = rear->next;
rear->next = p;
rear = p;
}
3. 出队列
bool deQueue(LinkList &rear, ElemType &x) {
if (rear == rear->next) {
return false;
}
LinkList p = rear->next->next;
x = p->data;
rear->next->next = p->next;
if (p == rear) {
rear = rear->next;
}
free(p);
return true;
}
注意:
- 以上代码中的
LinkList是一个指向节点的指针,ElemType是节点数据类型。 initQueue()函数初始化队列,创建一个空队列,将rear指针指向头结点,头结点的next指针指向自身,形成一个循环链表。enQueue()函数将元素x入队,创建一个新的节点p,并将p插入到rear指针指向的节点之前。最后将rear指针指向新节点p。deQueue()函数将队首元素出队。首先判断队列是否为空。如果不为空,则将rear指针指向的节点的next指针指向的节点(即队首元素)出队,将出队元素的值赋值给x。最后将rear指针指向出队元素的下一个节点(如果出队元素是rear指针指向的节点,则将rear指针指向下一个节点)。
希望本文能够帮助您理解循环链表队列的实现方法。
原文地址: https://www.cveoy.top/t/topic/jBem 著作权归作者所有。请勿转载和采集!