C言語でキューを実装するコードの書き方

キューを C 言語で実装するには、配列かリンクリストで要素を格納し、対応する操作を使用してキューの基本機能を実装します。以下は、配列を使用してキューを実装するサンプルコードです。

#include 
#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 == MAX_SIZE - 1);
}
void enqueue(Queue* q, int value) {
    if (isFull(q)) {
        printf("Error: Queue is full\n");
        return;
    }
    if (isEmpty(q)) {
        q->front = 0;
    }
    q->rear++;
    q->data[q->rear] = value;
}
int dequeue(Queue* q) {
    if (isEmpty(q)) {
        printf("Error: Queue is empty\n");
        return -1;
    }
    int value = q->data[q->front];
    if (q->front == q->rear) {
        // If there is only one element in the queue
        q->front = -1;
        q->rear = -1;
    } else {
        q->front++;
    }
    return value;
}
int main() {
    Queue q;
    initQueue(&q);
    enqueue(&q, 10);
    enqueue(&q, 20);
    enqueue(&q, 30);
    printf("Dequeued: %d\n", dequeue(&q));
    printf("Dequeued: %d\n", dequeue(&q));
    printf("Dequeued: %d\n", dequeue(&q));
    return 0;
}

上記のコードでは、キューを表すQueue構造体を定義し、整型の配列(要素を格納するために使用され、サイズはMAX_SIZE)と、キューの先頭と末尾をそれぞれ指す2つのポインタ(frontとrear)を含んでいます。

`initQueue()`関数はキューの初期化に使用され、`front`と`rear`を-1に設定して空のキューを示します。

「isEmpty()」関数はキューが空かどうかを検査し、front と rear が両方 -1 の場合、キューは空であることがわかる

`isFull()`関数はキューが一杯かどうかを調べます。`rear`が`MAX_SIZE – 1`と等しい場合、キューは一杯です。

`enqueue`関数では、キューに要素を追加する操作を行います。キューが満杯の場合、エラーメッセージを出力します。キューが空である場合は、`front`を0に設定します。次に、`rear`を1増やし、新しい要素をキューの最後に格納します。

「dequeue」関数はキューから要素を取り出す操作で、キューの先頭にある要素を取得して返します。まずキューが空かどうかチェックし、空の場合はエラーを出力します。キューに要素が1つだけ存在する場合は、「front」と「rear」をどちらも-1にセットします。それ以外は、「front」を1増やして、キューの先頭の要素を返します。

このコードは次の出力を生成します。

Dequeued: 10
Dequeued: 20
Dequeued: 30

同様に連結リストでキューを実装する場合は、ノードの定義と操作が異なるものの、同様のアプローチを使用できます。

bannerAds