用c语言编写一个简单的链队列
时间: 2024-05-12 19:17:41 浏览: 13
好的,我可以帮您回答这个问题。以下是一个简单的 C 语言链队列的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 队列节点结构体
struct Node {
int data; // 数据
struct Node* next; // 指向下一个节点的指针
};
// 队列结构体
struct Queue {
struct Node* front; // 指向队头
struct Node* rear; // 指向队尾
};
// 初始化一个空队列
void initQueue(struct Queue* queue) {
queue->front = NULL;
queue->rear = NULL;
}
// 判断队列是否为空
int isEmpty(struct Queue queue) {
return queue.front == NULL;
}
// 入队
void enqueue(struct Queue* queue, int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
if (queue->rear == NULL) {
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队
int dequeue(struct Queue* queue) {
if (isEmpty(*queue)) {
printf("队列为空\n");
exit(1);
}
struct Node* frontNode = queue->front;
int data = frontNode->data;
queue->front = frontNode->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(frontNode);
return data;
}
int main() {
struct Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
printf("%d\n", dequeue(&queue)); // 输出 1
printf("%d\n", dequeue(&queue)); // 输出 2
printf("%d\n", dequeue(&queue)); // 输出 3
printf("%d\n", dequeue(&queue)); // 队列为空,程序异常退出
return 0;
}
```
注意,这只是一个简单的实现,还有许多细节需要考虑,例如如何处理队列满、如何释放内存等等。但希望这个例子可以帮助您理解链队列的基本原理。