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;
}

代码解释

  1. 结构体定义: 我们首先定义了一个结构体Queue,其中包含一个整型数组data用于存储队列元素,frontrear分别指向队头和队尾。
  2. 初始化: init函数将frontrear初始化为0,表示空队列。
  3. 判断队列是否为空: is_empty函数判断frontrear是否相等,如果相等则表示队列为空。
  4. 判断队列是否已满: is_full函数判断rear+1是否等于front,如果相等则表示队列已满。
  5. 入队: enqueue函数首先判断队列是否已满,如果已满则输出提示信息并返回。否则,将新元素放入队尾,并更新rear指针。
  6. 出队: dequeue函数首先判断队列是否为空,如果为空则输出提示信息并返回-1。否则,取出队头元素并返回,并更新front指针。

总结

本篇文章介绍了使用C语言实现队列的初始化、入队和出队操作,并提供了完整的代码示例。通过学习本文,读者可以了解队列的基本原理和操作流程,并掌握其实现方法。需要注意的是,队列的长度是有限的,因此我们需要设置一个最大长度,避免队列溢出。

C语言实现队列的初始化、入队和出队操作

原文地址: https://www.cveoy.top/t/topic/jx4Y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录