C 语言队列输出的全面指南262
队列是一个先进先出 (FIFO) 数据结构,这意味着第一个进入队列的元素将是第一个离开队列的元素。C 语言中可以使用数组或链表来实现队列。
使用数组实现队列
使用数组实现队列时,队列中的元素存储在连续的内存块中。队列的头部和尾部使用两个指针进行跟踪,头部指针指向队列中的第一个元素,尾部指针指向队列中的最后一个元素。
队列操作
* 入队 (enqueue):将元素添加到队列的尾部。
* 出队 (dequeue):从队列的头部删除元素。
* 获取队列长度 (size):返回队列中的元素数量。
* 检查队列是否为空 (is_empty):如果队列为空,则返回 true,否则返回 false。
队列实现示例
```c
#include
#include
#define MAX_SIZE 10
typedef struct Queue {
int arr[MAX_SIZE];
int head;
int tail;
int size;
} Queue;
Queue* create_queue() {
Queue* queue = (Queue*) malloc(sizeof(Queue));
queue->head = queue->tail = queue->size = 0;
return queue;
}
void enqueue(Queue* queue, int data) {
if (queue->size == MAX_SIZE) {
printf("Queue is full");
return;
}
queue->arr[queue->tail] = data;
queue->tail = (queue->tail + 1) % MAX_SIZE;
queue->size++;
}
int dequeue(Queue* queue) {
if (queue->size == 0) {
printf("Queue is empty");
return -1;
}
int data = queue->arr[queue->head];
queue->head = (queue->head + 1) % MAX_SIZE;
queue->size--;
return data;
}
int main() {
Queue* queue = create_queue();
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
enqueue(queue, 4);
enqueue(queue, 5);
printf("Queue elements:");
while (!is_empty(queue)) {
printf("%d ", dequeue(queue));
}
printf("");
return 0;
}
```
使用链表实现队列
使用链表实现队列时,队列中的元素存储在动态分配的节点中。这些节点链接在一起形成一个链表。队列的头部和尾部使用两个指针进行跟踪,头部指针指向队列中的第一个节点,尾部指针指向队列中的最后一个节点。
队列操作
* 入队 (enqueue):将元素添加到队列的尾部。
* 出队 (dequeue):从队列的头部删除元素。
* 获取队列长度 (size):返回队列中的元素数量。
* 检查队列是否为空 (is_empty):如果队列为空,则返回 true,否则返回 false。
队列实现示例
```c
#include
#include
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct Queue {
Node* head;
Node* tail;
int size;
} Queue;
Queue* create_queue() {
Queue* queue = (Queue*) malloc(sizeof(Queue));
queue->head = queue->tail = NULL;
queue->size = 0;
return queue;
}
void enqueue(Queue* queue, int data) {
Node* new_node = (Node*) malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
if (queue->size == 0) {
queue->head = queue->tail = new_node;
} else {
queue->tail->next = new_node;
queue->tail = new_node;
}
queue->size++;
}
int dequeue(Queue* queue) {
if (queue->size == 0) {
printf("Queue is empty");
return -1;
}
Node* temp = queue->head;
int data = temp->data;
queue->head = queue->head->next;
if (queue->head == NULL) {
queue->tail = NULL;
}
free(temp);
queue->size--;
return data;
}
int main() {
Queue* queue = create_queue();
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
enqueue(queue, 4);
enqueue(queue, 5);
printf("Queue elements:");
while (!is_empty(queue)) {
printf("%d ", dequeue(queue));
}
printf("");
return 0;
}
```
2025-02-03
上一篇:C语言中不返回返回值的函数
下一篇:在 C 语言中输出分数
最新文章
4天前
4天前
4天前
4天前
4天前
热门文章
10-15 23:35
12-18 17:35
10-20 04:52
10-12 02:21
10-18 06:20
Java数组元素:从基础到高级操作的深度解析
https://www.shuihudhg.cn/134539.html
PHP Web应用的安全基石:全面解析数据库SQL注入防御
https://www.shuihudhg.cn/134538.html
Python函数入门到进阶:用简洁代码构建高效程序
https://www.shuihudhg.cn/134537.html
PHP中解析与提取代码注释:DocBlock、反射与AST深度探索
https://www.shuihudhg.cn/134536.html
Python深度解析与高效处理.dat文件:从文本到二进制的实战指南
https://www.shuihudhg.cn/134535.html
热门文章
C 语言中实现正序输出
https://www.shuihudhg.cn/2788.html
c语言选择排序算法详解
https://www.shuihudhg.cn/45804.html
C 语言函数:定义与声明
https://www.shuihudhg.cn/5703.html
C语言中的开方函数:sqrt()
https://www.shuihudhg.cn/347.html
C 语言中字符串输出的全面指南
https://www.shuihudhg.cn/4366.html