Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 대기열에서 빼기 및 우선 순위 대기열


대기열 데이터 구조는 선입선출 데이터 구조라는 것을 알고 있습니다. 대기열에도 약간의 변형이 있습니다. Dequeue 및 Priority Queue입니다.

Dequeue는 기본적으로 이중 종료 대기열입니다. 따라서 두 개의 전면 및 두 개의 후면 쌍이 있습니다. 한 쌍의 전면 및 후면 포인터는 왼쪽에서 대기열을 설명하는 데 사용되고 다른 한 쌍은 오른쪽에서 대기열을 설명하는 데 사용됩니다. 이 구조의 양쪽에서 요소를 삽입하거나 삭제할 수 있습니다. 여기에서 기능을 이해하기 위해 dequeue STL을 사용하는 일부 C++ 코드를 볼 수 있습니다.

예(디큐)

#include <iostream>
#include <deque>
using namespace std;
void dequeElements(deque <int> que) {
   deque <int> :: iterator it;
   for (it = que.begin(); it != que.end(); ++it)
      cout << *it << " ";
   cout <<endl;
}
int main() {
   deque <int> que;
   que.push_back(10);
   que.push_front(20);
   que.push_back(30);
   que.push_front(15);
   cout << "Currently que is holding : ";
   dequeElements(que);
   cout <<"Size of dequeue : " <<que.size() << endl;
   cout << "Element at position 2 : " << que.at(2) << endl;
   cout << "Element at front position : " << que.front() << endl;
   cout << "Element at back position : " << que.back() << endl;
   cout << "Delete from front side : ";
   que.pop_front();
   dequeElements(que);
   cout << "Delete from back side : ";
   que.pop_back();
   dequeElements(que);
}

출력

Currently que is holding : 15 20 10 30
Size of dequeue : 4
Element at position 2 : 10
Element at front position : 15
Element at back position : 30
Delete from front side : 20 10 30
Delete from back side : 20 10

대기열의 또 다른 변형은 우선 순위 대기열입니다. 이 구조에서 대기열의 각 요소에는 고유한 우선 순위가 있습니다. 대기열에 항목을 삽입할 때 우선 순위 값을 할당해야 합니다. 우선 순위가 가장 높은 요소를 먼저 삭제합니다. 우선순위 큐를 구현하는 가장 쉬운 방법 중 하나는 힙 데이터 구조를 사용하는 것입니다.

우선 순위 큐 STL에 대한 하나의 C++ 코드를 살펴보겠습니다. 여기서 우선 순위는 값을 기반으로 할당됩니다. 따라서 값이 높을수록 우선 순위가 가장 높은 요소로 처리됩니다.

예(우선 대기열)

#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