データ構造とアルゴリズム-キュー
キューは抽象的なデータ構造であり、スタックにいくぶん似ています。スタックとは異なり、キューは両端で開いています。一方の端は常にデータの挿入(エンキュー)に使用され、もう一方の端はデータの削除(デキュー)に使用されます。キューは先入れ先出し方式に従います。つまり、最初に格納されたデータ項目が最初にアクセスされます。
キューの実際の例としては、車両が最初に進入し、最初に退出する単一車線の一方通行道路があります。より現実的な例は、切符売り場やバス停の列として見ることができます。
キュー表現
キューにあることを理解したので、さまざまな理由で両端にアクセスします。以下の図は、キュー表現をデータ構造として説明しようとしています。
スタックの場合と同様に、キューは、配列、リンクリスト、ポインター、および構造体を使用して実装することもできます。簡単にするために、1次元配列を使用してキューを実装します。
基本操作
キュー操作には、キューの初期化または定義、それを利用した後、メモリから完全に消去することが含まれる場合があります。ここでは、キューに関連する基本的な操作を理解しようとします-
enqueue() −アイテムをキューに追加(保存)します。
dequeue() −キューからアイテムを削除(アクセス)します。
上記のキュー操作を効率化するために必要な関数はこれ以上ありません。これらは-
peek() −キューの先頭にある要素を削除せずに取得します。
isfull() −キューがいっぱいかどうかを確認します。
isempty() −キューが空かどうかを確認します。
キューでは、常にデータをデキュー(またはアクセス)します。 front ポインタとキュー内のデータをクエリ(または保存)している間、私たちは助けを借ります rear ポインター。
まず、キューのサポート機能について学びましょう-
ピーク()
この関数は、でデータを確認するのに役立ちます frontキューの。peek()関数のアルゴリズムは次のとおりです-
Algorithm
begin procedure peek
return queue[front]
end procedure
Cプログラミング言語でのpeek()関数の実装-
Example
int peek() {
return queue[front];
}
一杯()
単一次元配列を使用してキューを実装しているため、キューがいっぱいであると判断するために、リアポインタがMAXSIZEに到達するかどうかを確認するだけです。循環リンクリストでキューを維持する場合、アルゴリズムは異なります。isfull()関数のアルゴリズム-
Algorithm
begin procedure isfull
if rear equals to MAXSIZE
return true
else
return false
endif
end procedure
Cプログラミング言語でのisfull()関数の実装-
Example
bool isfull() {
if(rear == MAXSIZE - 1)
return true;
else
return false;
}
isempty()
isempty()関数のアルゴリズム-
Algorithm
begin procedure isempty
if front is less than MIN OR front is greater than rear
return true
else
return false
endif
end procedure
の値が front がMINまたは0未満の場合、キューがまだ初期化されていないため、空であることを示します。
これがCプログラミングコードです-
Example
bool isempty() {
if(front < 0 || front > rear)
return true;
else
return false;
}
エンキュー操作
キューは2つのデータポインタを維持します。 front そして rear。したがって、その操作はスタックの操作よりも実装が比較的困難です。
データをキューにエンキュー(挿入)するには、次の手順を実行する必要があります-
Step 1 −キューがいっぱいかどうかを確認します。
Step 2 −キューがいっぱいの場合は、オーバーフローエラーを生成して終了します。
Step 3 −キューがいっぱいでない場合は、インクリメントします rear 次の空のスペースを指すポインタ。
Step 4 −後部が指しているキューの場所にデータ要素を追加します。
Step 5 −成功を返します。
場合によっては、予期しない状況に対処するために、キューが初期化されているかどうかを確認することもあります。
エンキュー操作のアルゴリズム
procedure enqueue(data)
if queue is full
return overflow
endif
rear ← rear + 1
queue[rear] ← data
return true
end procedure
Cプログラミング言語でのenqueue()の実装-
Example
int enqueue(int data)
if(isfull())
return 0;
rear = rear + 1;
queue[rear] = data;
return 1;
end procedure
デキュー操作
キューからのデータへのアクセスは、2つのタスクのプロセスです。 frontアクセス後にデータをポイントして削除します。実行するには、次の手順を実行しますdequeue 操作-
Step 1 −キューが空かどうかを確認します。
Step 2 −キューが空の場合、アンダーフローエラーを生成して終了します。
Step 3 −キューが空でない場合は、次の場所のデータにアクセスします。 front 指しています。
Step 4 −インクリメント front 次に使用可能なデータ要素を指すポインタ。
Step 5 −成功を返します。
デキュー操作のアルゴリズム
procedure dequeue
if queue is empty
return underflow
end if
data = queue[front]
front ← front + 1
return true
end procedure
Cプログラミング言語でのdequeue()の実装-
Example
int dequeue() {
if(isempty())
return 0;
int data = queue[front];
front = front + 1;
return data;
}
Cプログラミング言語の完全なキュープログラムについては、ここをクリックしてください。