#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100

typedef struct Queue {
    int data[MAX_SIZE];
    int front, rear;
} Queue;

Queue* create_queue() {
    Queue* queue = (Queue*) malloc(sizeof(Queue));
    queue->front = queue->rear = -1;
    return queue;
}

int is_empty(Queue* queue) {
    return queue->front == -1;
}

int is_full(Queue* queue) {
    return (queue->rear + 1) % MAX_SIZE == queue->front;
}

void enqueue(Queue* queue, int value) {
    if (is_full(queue)) {
        printf("Queue is full\n");
        return;
    }
    if (is_empty(queue)) {
        queue->front = queue->rear = 0;
    } else {
        queue->rear = (queue->rear + 1) % MAX_SIZE;
    }
    queue->data[queue->rear] = value;
}

int dequeue(Queue* queue) {
    if (is_empty(queue)) {
        printf("Queue is empty\n");
        return -1;
    }
    int value = queue->data[queue->front];
    if (queue->front == queue->rear) {
        queue->front = queue->rear = -1;
    } else {
        queue->front = (queue->front + 1) % MAX_SIZE;
    }
    return value;
}

void print_queue(Queue* queue) {
    if (is_empty(queue)) {
        printf("Queue is empty\n");
        return;
    }
    int i = queue->front;
    while (i != queue->rear) {
        printf("%d ", queue->data[i]);
        i = (i + 1) % MAX_SIZE;
    }
    printf("%d\n", queue->data[queue->rear]);
}

int main() {
    Queue* queue = create_queue();
    enqueue(queue, 1);
    enqueue(queue, 2);
    enqueue(queue, 3);
    print_queue(queue);
    printf("Dequeued: %d\n", dequeue(queue));
    print_queue(queue);
    printf("Dequeued: %d\n", dequeue(queue));
    print_queue(queue);
    printf("Dequeued: %d\n", dequeue(queue));
    print_queue(queue);
    printf("Dequeued: %d\n", dequeue(queue));
    return 0;
}
用C语言实现队列

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

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