简单队列

title

简单队列是一种基本的数据结构,它遵循先进先出(FIFO)的原则,即先加入队列的元素先被取出。可以用数组或链表实现。

以下是用数组实现简单队列的示例代码(使用循环队列):


#include <stdio.h>
#define MAX_SIZE 100

int queue[MAX_SIZE];
int front = -1, rear = -1;

void enqueue(int value) {
    if ((rear + 1) % MAX_SIZE == front) {  // 判断队列是否已满
        printf("Queue is full.\n");
        return;
    }
    if (front == -1) front = 0;  // 队列为空,初始化front
    rear = (rear + 1) % MAX_SIZE;  // 循环队列,rear指向下一个空位置
    queue[rear] = value;  // 插入元素
}

int dequeue() {
    if (front == -1) {  // 判断队列是否为空
        printf("Queue is empty.\n");
        return -1;
    }
    int value = queue[front];
    if (front == rear) {  // 队列中只有一个元素,重置front和rear
        front = -1;
        rear = -1;
    } else {
        front = (front + 1) % MAX_SIZE;  // 循环队列,front指向下一个元素
    }
    return value;
}

int main() {
    enqueue(1);
    enqueue(2);
    enqueue(3);
    printf("%d\n", dequeue());  // 输出1
    printf("%d\n", dequeue());  // 输出2
    enqueue(4);
    printf("%d\n", dequeue());  // 输出3
    printf("%d\n", dequeue());  // 输出4
    printf("%d\n", dequeue());  // 输出"Queue is empty."
    return 0;
}

在上面的示例代码中,使用一个数组实现循环队列,通过front和rear分别指向队列的首尾元素,enqueue操作在rear处插入元素,dequeue操作从front处删除元素。注意,当队列为空时,front和rear都应该重置为-1。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:00

results matching ""

    No results matching ""