C语言实现队列的初始化、入队和出队操作
C语言实现队列的初始化、入队和出队操作
队列是一种常见的数据结构,它遵循先进先出(FIFO)的原则。队列有两个基本操作:入队(enqueue)和出队(dequeue)。在本篇文章中,我们将使用C语言实现队列的初始化、入队和出队操作。
代码实现
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 最大队列长度
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void init(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int is_empty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int is_full(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 入队操作
void enqueue(Queue *q, int value) {
if (is_full(q)) {
printf('Queue is full.\n');
return;
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
}
// 出队操作
int dequeue(Queue *q) {
if (is_empty(q)) {
printf('Queue is empty.\n');
return -1;
}
int value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return value;
}
int main() {
Queue q;
init(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printf('%d\n', dequeue(&q)); // 输出1
printf('%d\n', dequeue(&q)); // 输出2
printf('%d\n', dequeue(&q)); // 输出3
printf('%d\n', dequeue(&q)); // 输出'Queue is empty.'
return 0;
}
代码解释
- 结构体定义: 我们首先定义了一个结构体
Queue,其中包含一个整型数组data用于存储队列元素,front和rear分别指向队头和队尾。 - 初始化:
init函数将front和rear初始化为0,表示空队列。 - 判断队列是否为空:
is_empty函数判断front和rear是否相等,如果相等则表示队列为空。 - 判断队列是否已满:
is_full函数判断rear+1是否等于front,如果相等则表示队列已满。 - 入队:
enqueue函数首先判断队列是否已满,如果已满则输出提示信息并返回。否则,将新元素放入队尾,并更新rear指针。 - 出队:
dequeue函数首先判断队列是否为空,如果为空则输出提示信息并返回-1。否则,取出队头元素并返回,并更新front指针。
总结
本篇文章介绍了使用C语言实现队列的初始化、入队和出队操作,并提供了完整的代码示例。通过学习本文,读者可以了解队列的基本原理和操作流程,并掌握其实现方法。需要注意的是,队列的长度是有限的,因此我们需要设置一个最大长度,避免队列溢出。
原文地址: https://www.cveoy.top/t/topic/jx4Y 著作权归作者所有。请勿转载和采集!