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 语言中输出分数