C言語でキューに要素を挿入する方法を徹底解説!基本概念からサンプルコードまで
データ構造とは、データを体系的かつ効率的に整理・格納するための仕組みです。データ構造は、その構成方法によって大きく以下の2種類に分類できます。
- 線形データ構造 − データが一直線上に順序立てて配置される構造です。例として、配列、構造体、スタック、キュー、連結リストなどが挙げられます。
- 非線形データ構造 − データが階層的・網目的に配置される構造です。例として、木(ツリー)、グラフ、集合、テーブルなどが挙げられます。
キュー(Queue)とは
キューは線形データ構造の一つで、後端(リア/rear)から要素を挿入し、前端(フロント/front)から要素を削除するという特徴を持っています。
キューにおけるデータの処理順序はFIFO(First In First Out:先入れ先出し)と呼ばれます。これは、最初に挿入された要素が最初に取り出されることを意味します。日常的な例では、レジや窓口に並ぶ行列がイメージしやすいでしょう。
キューの基本操作
- 挿入(Insert / Enqueue) − キューの後端に新しい要素を追加します。
- 削除(Delete / Dequeue) − キューの前端から要素を取り除きます。
キューの状態に関する条件
- キューオーバーフロー(Queue Overflow) − すでに満杯のキューに対して、さらに要素を挿入しようとしたときに発生するエラー状態です。
- キューアンダーフロー(Queue Underflow) − 空のキューから要素を削除しようとしたときに発生するエラー状態です。
挿入操作のアルゴリズム
キューへの要素挿入を行う insert( ) 関数の基本的なアルゴリズムは以下の通りです。
まず、キューが満杯かどうか(オーバーフロー)をチェックします。
if (r == n)
printf("Queue overflow")オーバーフローでなければ、後端の位置に要素を格納し、リアポインタを1つ進めます。
q[r] = item r++
C言語によるキュー挿入プログラム
以下は、C言語でキューに要素を挿入する完全なサンプルプログラムです。メニュー形式で「要素の挿入」「キュー内容の表示」「終了」を選択できる構成になっています。
#include <stdio.h>
#define MAX 50
void insert();
int array[MAX];
int rear = - 1;
int front = - 1;
main(){
int add_item;
int choice;
while (1){
printf("1.Insert element to queue \n");
printf("2.Display elements of queue \n");
printf("3.Quit \n");
printf("Enter your choice : ");
scanf("%d", &choice);
switch (choice){
case 1:
insert();
break;
case 2:
display();
break;
case 3:
exit(1);
default:
printf("Wrong choice \n");
}
}
}
void insert(){
int add_item;
if (rear == MAX - 1)
printf("Queue Overflow \n");
else{
if (front == - 1)
/*If queue is initially empty */
front = 0;
printf("Inset the element in queue : ");
scanf("%d", &add_item);
rear = rear + 1;
array[rear] = add_item;
}
}
void display(){
int i;
if (front == - 1)
printf("Queue is empty \n");
else{
printf("Queue is : \n");
for (i = front; i <= rear; i++)
printf("%d ", array[i]);
printf("\n");
}
}実行結果
上記のプログラムを実行すると、以下のような出力が得られます。要素「34」と「24」を順番に挿入した後、キューの内容を表示すると、先に入れた「34」が先頭に並んでいることが確認できます。これこそがFIFO(先入れ先出し)の動作です。
1.Insert element to queue 2.Display elements of queue 3.Quit Enter your choice: 1 Inset the element in queue: 34 1.Insert element to queue 2.Display elements of queue 3.Quit Enter your choice: 1 Inset the element in queue: 24 1.Insert element to queue 2.Display elements of queue 3.Quit Enter your choice: 2 Queue is: 34 24 1.Insert element to queue 2.Display elements of queue 3.Quit Enter your choice: 3
まとめ
この記事では、C言語におけるキューへの要素挿入について解説しました。キューはFIFO方式を採用した線形データ構造であり、挿入は後端から、削除は前端から行われます。実装時には、オーバーフロー(満杯チェック)とアンダーフロー(空チェック)の2つの条件を適切にハンドリングすることが重要です。配列ベースのシンプルな実装を通じて、キューの基本動作をしっかりと理解しておきましょう。
-
C言語のシフト演算とは?左シフト・右シフト・補数の基本をわかりやすく解説
問題 C言語を使用して、ある数値に対する左シフト・右シフト・補数(ビット反転)を求める簡単なプログラムを作成するには、どのようにすればよいのでしょうか。 解決方法 左シフト(<<) 変数の値を1ビットだけ左へシフトすると、その値は2倍になります。「a × 2」を計算したのと同じ結果です。 例:a = 10 の場合、a << 1 = 20 右シフト(>>) 変数の値を1ビットだけ右へシフトすると、その値は元の半分になります。「a ÷ 2」の整数除算と同じ結果です。 例:a = 10 の場合、a >> 1 = 5 サンプルプログラム 以下は、シ
-
C言語の探索アルゴリズム解説|線形探索と二分探索の違いと実装例
探索(サーチ)とは、複数の要素で構成されるリストの中から、目的の「キー」となる要素を見つけ出す処理のことです。 リストの中に指定した要素が存在すれば、その探索は「成功」とみなされます。 指定した要素がリストに存在しなければ、その探索は「失敗(不成功)」となります。 C言語で広く使われている代表的な探索手法は、主に次の2つです。 線形探索(Linear Search/リニアサーチ) 二分探索(Binary Search/バイナリサーチ) 線形探索(Linear Search)とは 線形探索は、リストの先頭から順に要素を1つずつ取り出し、キーと一致するかどうかを確認していく、最も基本的な探