歡迎加入我的 Discord 群組與我討論程式相關的問題!

佇列 (queues)

所謂的佇列就是一種先進先出的資料結構,就跟排隊一模一樣! 先進去的人會先出來。

圖片取自: https://fgchen.com/wpedu/2016/12/01/%E3%80%90%E8%B3%87%E6%96%99%E7%B5%90%E6%A7%8B%E3%80%91%E4%BD%87%E5%88%97queue%E4%BB%8B%E7%B4%B9%E8%88%87%E4%BD%BF%E7%94%A8/
圖片取自: 【資料結構】佇列(Queue)介紹與使用

每次你可以從隊列的最後面加入新的元素,這個操作叫做 push
或是可以把隊列最前面的元素拿出來,這個操作叫做 pop

要注意的是這種資料結構並不允許你可以從中間插入或是獲取元素,你每次就只能知道隊伍最前面的人是誰而已。

這個資料結構在很多情況會用到。例如,在 bfs 的時候,你要存著一個要處理的隊伍,而這個隊伍就可以用 queue 來做!
在 C++ 的 STL 當中已經幫你實作完 queue 了,使用方法如下:

複雜度:

插入 (push): O(1)
刪除 (pop): O(1)

宣告

// 語法:
#include <queue>
queue <資料型別> 名字;

// Ex:
queue <int> q; // 宣告裡面存 int 的 queue
queue <pair<int,int> > q2; // 宣告裡面存 pair 的 queue

加入東西 (push)

push 函數可以讓你把東西加進去 queue 的尾端

// 語法:
名字.push(元素);

// Ex: 
queue <int> q;
q.push(3);
q.push(3+5);

得到最前面的元素 (front)

// 語法:
名字.front();

// Ex:
queue <int> q;
q.push(3);
q.push(4);
cout << q.front() << '\n'; 
// q.front() 會是 3 因為 3 在隊伍最前面

移除最前面的元素 (pop)

// 語法:
名字.pop();

// Ex:
queue <int> q;
q.push(3);
q.pop(); 
// 移除最前面的元素

得到 queue 的大小 (empty, size)

// 語法:
名字.size(); // 大小
名字.empty(); // 是否是空的

queue <int> q;
q.push(3);
q.push(4);
cout << q.size(); // 2
if(q.empty()) {
    cout << "Empty\n";
} else {
    cout << "Not Empty\n";
} 
// Not empty

queue <int> q2;
cout << q2.size(); // 0
if(q2.empty()) {
    cout << "Empty\n";
} else {
    cout << "Not Empty\n";
} 
// Empty

Blog at WordPress.com.