C语言循环单链表实现队列操作:入队(EnQueue)和出队(DeQueue)详解
以下是利用循环单链表模拟实现队列操作的EnQueue(入队)和DeQueue(出队)过程的示例代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct Queue {
Node* front;
Node* rear;
} Queue;
// 初始化队列
void initQueue(Queue* q) {
q->front = NULL;
q->rear = NULL;
}
// 入队操作
void enQueue(Queue* q, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (q->rear == NULL) {
// 队列为空,新节点既是队首也是队尾
q->front = newNode;
q->rear = newNode;
} else {
// 将新节点添加到队列尾部,并更新队尾指针
q->rear->next = newNode;
q->rear = newNode;
}
}
// 出队操作
int deQueue(Queue* q) {
if (q->front == NULL) {
// 队列为空,无法出队
printf("Queue is empty.\n");
return -1;
}
Node* temp = q->front;
int value = temp->data;
if (q->front == q->rear) {
// 队列只有一个节点,出队后队列为空
q->front = NULL;
q->rear = NULL;
} else {
// 更新队首指针
q->front = q->front->next;
}
free(temp);
return value;
}
int main() {
Queue q;
initQueue(&q);
enQueue(&q, 10);
enQueue(&q, 20);
enQueue(&q, 30);
printf("Dequeued item: %d\n", deQueue(&q));
printf("Dequeued item: %d\n", deQueue(&q));
printf("Dequeued item: %d\n", deQueue(&q));
return 0;
}
在上述代码中,我们使用了循环单链表来实现队列操作。Queue结构体包含了指向队首和队尾的指针。initQueue()函数用于初始化队列,enQueue()函数用于入队操作,deQueue()函数用于出队操作。在deQueue()函数中,我们首先检查队列是否为空,如果为空,则输出提示信息;如果不为空,则更新队首指针,释放出队节点的内存,并返回出队的元素值。
在main()函数中,我们演示了入队和出队操作的使用。
原文地址: https://www.cveoy.top/t/topic/VuK 著作权归作者所有。请勿转载和采集!