配列を利用して 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関数でキューの先頭の要素の値を取得します。