C言語ではqueueが用意されていません。
自分で定義する必要があります。
そこで基本的なQueueの定義を用意しました。
Queueで扱う要素は必要に応じて編集してください。
概要
・配列を使った循環バッファ形式のQueue
・要素の追加(enqueue)、取り出し(dequeue)、先頭確認(peek)が可能
・Queueが空か・満杯かの判定付き
・扱うデータ型(Coord)は編集可能
#include <stdio.h> // 標準入出力
#include <stdlib.h> // exit関数などを使用するため
#define MAX_QUEUE_SIZE 100
// Queueで扱う構造体(必要に応じて編集可能)
typedef struct {
int y;
int x;
} Coord;
// Queue構造体(Coord型の循環バッファ)
typedef struct {
Coord data[MAX_QUEUE_SIZE]; // Queue内に格納する要素の配列
int front; // 先頭(取り出し位置)のインデックス
int rear; // 最後尾(追加位置)のインデックス
} Queue;
// Queueを初期化する
void initQueue(Queue *queue) {
queue->front = -1; // 空の状態を示す -1 に設定
queue->rear = -1;
}
// Queueが空かどうかを判定する
int isEmpty(Queue *queue) {
return (queue->front == -1 && queue->rear == -1);
}
// Queueが満杯かどうかを判定する
int isFullQueue(Queue *queue) {
return (queue->rear + 1) % MAX_QUEUE_SIZE == queue->front;
}
// Queueに要素を追加する
void enqueue(Queue *queue, Coord coord) {
if (isFullQueue(queue)) {
fprintf(stderr, "queue is full.\n");
exit(1);
}
if (isEmpty(queue)) {
queue->front = 0;
queue->rear = 0;
} else {
queue->rear = (queue->rear + 1) % MAX_QUEUE_SIZE;
}
queue->data[queue->rear] = coord;
}
// Queueから要素を取り出す
Coord dequeue(Queue *queue) {
if (isEmpty(queue)) {
fprintf(stderr, "queue is empty.\n");
exit(1);
}
Coord coord = queue->data[queue->front];
if (queue->front == queue->rear) {
queue->front = -1;
queue->rear = -1;
} else {
queue->front = (queue->front + 1) % MAX_QUEUE_SIZE;
}
return coord;
}
// Queueの先頭要素を確認する(取り出さない)
Coord peek(Queue *queue) {
if (isEmpty(queue)) {
fprintf(stderr, "queue is empty.\n");
exit(1);
}
return queue->data[queue->front];
}