開啟章節選單
佇列
常見概念
佇列(queue)是個具有先進先出(FIFO / First In, First Out)的資料結構。可以在佇列的後方做插入的動作,也可以在前方做刪除的動作。Queue 在現實生活中就像排隊一樣,先到的可以先拿,而後到的就要等前面的都被 pop 以後才會輪到他。
Queue 最基本的幾個操作有這些:
push
queue 中的 push 函式是用來在 queue 的尾端加入新的元素。
pop
queue 中的 pop 函式是用來刪除 queue 中排在最前面的值。
front
queue 中的 front 函式就是用來求出最前面的值,也就是下一個會被 pop 的值。
size / empty
就像其他的資料結構一樣,queue 也支援查詢目前的大小及是否為空。
用陣列實作
就像堆疊(stack)一樣,queue 也可以輕易的用 vector 實作出來(一般的陣列也可以)。這裡提供一個用 vector 實作的程式碼:
vector<int> queue; int left = 0; // 將 x 推到 queue 的尾端 void push(int x) { queue.push_back(x); } // 查詢 queue 的大小 int size() { return queue.size() - left; } // 將最前端的元素刪除 void pop() { if (size() > 0){ left++; } } // 查詢最前端的元素 int front() { if (size() > 0){ return queue[left]; } return 0; } // queue 是否為空 bool empty(){ return (size() == 0); }
STL 內建 queue 使用方式
就像 stack 一樣,可以使用 C++ STL 中的 queue
來使用 queue,需要先引入 <queue>
的標頭檔。
// 創造一個 queue queue<int> my_queue; // 將 1 推入 queue 的尾端 my_queue.push(1); // 將 2 推入 queue 的尾端 my_queue.push(2); // 印出 1 cout << my_queue.front() << "\n"; // 把最前端的 1 刪除 my_queue.pop(); // 印出 2 cout << my_queue.front() << "\n"; // 印出 1 cout << my_queue.size() << "\n";
小測驗
一個 queue 的元素依序為 {1, 2, 3},當呼叫 pop 的時候會刪除哪一個元素