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

每次你可以從隊列的最後面加入新的元素,這個操作叫做 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