C++ 程式中雙端優先佇列


本教程中,我們將使用 C++ 中的 set 建立一個雙端優先順序佇列。

讓我們看下建立雙端佇列的步驟。

  • 建立你希望命名的結構。

  • 使用 set 建立一個佇列變數。

  • size 方法,返回佇列的大小。

  • is_empty 方法,返回佇列是否為空。

  • insert 方法,將新元素插入佇列中。

  • get_start 方法,返回佇列左側的元素。

  • get_end 方法,返回佇列右側的元素。

  • delete_start 方法,刪除左側的第一個元素。

  • delete_end 方法,刪除右側的第一個元素。

示例

讓我們看下程式碼。

 線上演示

#include <bits/stdc++.h>
using namespace std;
struct doubleEndedQueue {
   set<int> s;
   int size() {
      return s.size();
   }
   string is_empty() {
      return s.size() == 0 ? "True" : "False";
   }
   void insert(int x) {
      s.insert(x);
   }
   int get_start() {
      return *(s.begin());
   }
   int get_end() {
      return *(s.rbegin());
   }
   void delete_start() {
      if (s.size() == 0) {
         return;
      }  
      s.erase(s.begin());
   }
   void delete_end() {
      if (s.size() == 0) {
         return;
      }
      auto end = s.end();
      end--;
      s.erase(end);
   }
};
int main() {
   doubleEndedQueue d;
   cout << "is empty: " << d.is_empty() << endl;
   d.insert(1);
   d.insert(2);
   d.insert(3);
   d.insert(4);
   d.insert(5);
   cout << "is empty: " << d.is_empty() << endl;
   cout << "end: " << d.get_end() << endl;
   d.delete_end();
   cout << "end: " << d.get_end() << endl;
   cout << "start: " << d.get_start() << endl;
   d.delete_start();
   cout << "start: " << d.get_start() << endl;
   return 0;
}

輸出

如果你執行以上程式碼,則會得到以下結果。

is empty: True
is empty: False
end: 5
end: 4
start: 1
start: 2

總結

如果您對教程有任何疑問,請在評論部分中提及。

上次更新:28-1 月-2021

541 次瀏覽

開啟您的職業生涯

完成課程,獲得認證

開始學習
廣告