0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語におけるQueueの基本的な定義

Posted at

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];
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?