配列を利用して C 言語でキューを実装の方法

配列を利用したキューの実装では、frontとrearの2つのポインタを使用してキューの頭と尾をそれぞれ指します。以下は、配列を使用してキューを実装するサンプルコードです。

#include <stdio.h>
#define MAX_SIZE 100

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

void initQueue(Queue *q) {
    q->front = -1;
    q->rear = -1;
}

int isEmpty(Queue *q) {
    return (q->front == -1 && q->rear == -1);
}

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

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

void dequeue(Queue *q) {
    if (isEmpty(q)) {
        printf("Queue is empty\n");
        return;
    }
    if (q->front == q->rear) {
        q->front = -1;
        q->rear = -1;
    } else {
        q->front = (q->front + 1) % MAX_SIZE;
    }
}

int front(Queue *q) {
    if (isEmpty(q)) {
        printf("Queue is empty\n");
        return -1;
    }
    return q->data[q->front];
}

int main() {
    Queue q;
    initQueue(&q);

    enqueue(&q, 5);
    enqueue(&q, 10);
    enqueue(&q, 15);

    printf("Front element: %d\n", front(&q));
    dequeue(&q);
    printf("Front element: %d\n", front(&q));

    return 0;
}

このサンプルコードでは、キューのデータを保持するためと2つのポインタのためにキュー構造体を定義します。 initQueue関数はキューを初期化するため、isEmptyとisFull関数はキューが空か一杯かを判断するためです。 enqueue関数は要素をキューに入れるため、dequeue関数はキューの先頭の要素を取り出すため、front関数はキューの先頭の要素の値を取得するためです。

main関数では、キューを初期化した後、enqueue関数で3つの要素をキューに入れます。それからfront関数でキューの先頭の要素の値を取得し、dequeue関数でキューの先頭の要素を出力します。最後に再度front関数でキューの先頭の要素の値を取得します。

bannerAds