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