C语言创建一个先进先出的队列
时间: 2023-11-23 09:52:09 浏览: 139
C语言实现的 通用FIFO 先进先出队列
5星 · 资源好评率100%
在C语言中,可以使用链表来实现一个先进先出(FIFO)的队列。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义队列节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 定义队列结构
typedef struct Queue {
Node* front;
Node* rear;
} Queue;
// 初始化队列
void initializeQueue(Queue* queue) {
queue->front = NULL;
queue->rear = NULL;
}
// 入队操作
void enqueue(Queue* queue, int data) {
Node* newNode = (Node*)malloc(sizeof(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(Queue* queue) {
if (queue->front == NULL) {
printf("队列为空\n");
exit(1);
}
Node* temp = queue->front;
int data = temp->data;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
return data;
}
// 判断队列是否为空
int isEmpty(Queue* queue) {
return (queue->front == NULL);
}
int main() {
Queue queue;
initializeQueue(&queue);
// 入队操作
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
enqueue(&queue, 4);
enqueue(&queue, 5);
// 出队操作
while (!isEmpty(&queue)) {
printf("出队元素:%d\n", dequeue(&queue));
}
return 0;
}
```
在上述示例中,我们首先定义了队列节点结构 `Node`,其中包含一个整数类型的 `data` 数据和指向下一个节点的指针 `next`。
然后,我们定义了队列结构 `Queue`,其中包含队列的前端指针 `front` 和后端指针 `rear`。
接下来,我们实现了一系列操作函数:
- `initializeQueue`:用于初始化队列,将前端和后端指针都设为 NULL。
- `enqueue`:用于将元素入队,创建新的节点,并根据队列的状态将其插入到合适的位置。
- `dequeue`:用于将元素出队,从队列的前端移除节点,并返回其数据。
- `isEmpty`:用于判断队列是否为空。
在 `main` 函数中,我们首先初始化队列,然后使用 `enqueue` 函数将一些元素入队。接着,我们使用 `dequeue` 函数将元素出队,并打印出队元素的值,直到队列为空。
运行上述代码,输出结果如下:
```
出队元素:1
出队元素:2
出队元素:3
出队元素:4
出队元素:5
```
通过这个示例,我们可以看到使用链表实现先进先出(FIFO)的队列的具体实现过程。队列的入队和出队操作分别在队列的尾部和头部进行,保证了先进先出的特性。
阅读全文