c語(yǔ)言列隊(duì)如何簡(jiǎn)化實(shí)現(xiàn)

小樊
81
2024-10-16 22:54:28

在C語(yǔ)言中,簡(jiǎn)化實(shí)現(xiàn)隊(duì)列的數(shù)據(jù)結(jié)構(gòu)可以使用數(shù)組。以下是一個(gè)使用數(shù)組實(shí)現(xiàn)隊(duì)列的簡(jiǎn)單示例:

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

#define SIZE 5

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

Queue* createQueue() {
    Queue* queue = (Queue*)malloc(sizeof(Queue));
    if (queue == NULL) {
        printf("Memory error\n");
        exit(0);
    }
    queue->front = queue->size - 1;
    queue->rear = -1;
    return queue;
}

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

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

void enqueue(Queue* queue, int item) {
    if (isFull(queue)) {
        printf("Queue is full\n");
        return;
    }
    queue->rear = (queue->rear + 1) % SIZE;
    queue->data[queue->rear] = item;
}

int dequeue(Queue* queue) {
    if (isEmpty(queue)) {
        printf("Queue is empty\n");
        return -1;
    }
    int item = queue->data[queue->front];
    queue->front = (queue->front + 1) % SIZE;
    return item;
}

int main() {
    Queue* queue = createQueue();
    enqueue(queue, 1);
    enqueue(queue, 2);
    enqueue(queue, 3);
    enqueue(queue, 4);
    enqueue(queue, 5);

    while (!isEmpty(queue)) {
        printf("%d ", dequeue(queue));
    }

    free(queue);
    return 0;
}

這個(gè)示例中,我們定義了一個(gè)名為Queue的結(jié)構(gòu)體,其中包含一個(gè)數(shù)組data來(lái)存儲(chǔ)隊(duì)列中的元素,以及兩個(gè)整數(shù)變量frontrear分別表示隊(duì)列的頭部和尾部。接下來(lái),我們實(shí)現(xiàn)了一些基本的隊(duì)列操作,如創(chuàng)建隊(duì)列、判斷隊(duì)列是否已滿、判斷隊(duì)列是否為空、入隊(duì)(enqueue)和出隊(duì)(dequeue)。

main函數(shù)中,我們創(chuàng)建了一個(gè)隊(duì)列,并向其中添加了一些元素。然后,我們使用一個(gè)循環(huán)將隊(duì)列中的所有元素依次出隊(duì)并打印出來(lái)。最后,我們釋放了分配給隊(duì)列的內(nèi)存。

0