C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の優先キュー


キューのデータ構造は先入れ先出しのデータ構造であることがわかっています。キューにもいくつかのバリエーションがあります。これらは、デキューと優先キューです。

ここでは、キューの1つのバリエーション、つまり優先キューを確認します。この構造では、キュー内の各要素に独自の優先順位があります。アイテムをキューに挿入するときは、優先度の値を割り当てる必要があります。最初に最も優先度の高い要素を削除します。優先キューを実装する最も簡単な方法の1つは、ヒープデータ構造を使用することです。

優先キューSTLの1つのC++コードを見てみましょう。ここでは、値に基づいて優先度が割り当てられます。したがって、より高い値は最も優先度の高い要素として扱われます。

アルゴリズム

insert(key, priority):
Begin
   insert key at the end of the heap
   heapify the array based on the priority
End
delete():
Begin
   item := root element
   root := last element from array
   heapify the array to arrange based on priority
   return item
End

#include <iostream>
#include <queue>
using namespace std;
void dequeElements(priority_queue <int> que) {
   priority_queue <int> q = que;
   while(!q.empty()){
      cout << q.top() << " ";
      q.pop();
   }
   cout << endl;
}
int main() {
   priority_queue <int> que;
   que.push(10);
   que.push(20);
   que.push(30);
   que.push(5);
   que.push(1);
   cout << "Currently que is holding : ";
   dequeElements(que);
   cout << "Size of queue : " << que.size() << endl;
   cout << "Element at top position : " << que.top() << endl;
   cout << "Delete from queue : ";
   que.pop();
   dequeElements(que);
   cout << "Delete from queue : ";
   que.pop();
   dequeElements(que);
}

出力

Currently que is holding : 30 20 10 5 1
Size of queue : 5
Element at top position : 30
Delete from queue : 20 10 5 1
Delete from queue : 10 5 1

  1. C++で二重にリンクされたリストを使用した優先キュー

    データと優先度は整数値として与えられ、タスクは与えられた優先度に従って二重にリンクされたリストを作成し、結果を表示することです。 キューはFIFOデータ構造であり、最初に挿入された要素が最初に削除されます。優先度付きキューは、優先度に応じて要素を挿入または削除できるキューの一種です。キュー、スタック、またはリンクリストのデータ構造を使用して実装できます。優先キューは、次のルールに従って実装されます- 優先度が最も高いデータまたは要素は、優先度が最も低いデータまたは要素の前に実行されます。 2つの要素の優先度が、順番に実行される要素と同じである場合、それらはリストに追加されます。 優先

  2. メッセージキューを使用したIPC

    共有メモリがすでにあるのに、なぜメッセージキューが必要なのですか?それは複数の理由によるでしょう、単純化するためにこれを複数のポイントに分割してみましょう- 理解されているように、メッセージがプロセスによって受信されると、他のプロセスでは使用できなくなります。一方、共有メモリでは、データは複数のプロセスがアクセスできるようになっています。 小さなメッセージ形式で通信したい場合。 複数のプロセスが同時に通信する場合は、共有メモリデータを同期で保護する必要があります。 共有メモリを使用した書き込みと読み取りの頻度が高い場合、機能の実装は非常に複雑になります。この種の場合の利