您好,登錄后才能下訂單哦!
1. 基礎
隊列:先進先出,即插入數據在隊尾進行,刪除數據在隊頭進行;
棧:后進先出,即插入與刪除數據均在棧頂進行。
2. 思路
兩個棧實現一個隊列的思想:用pushStack棧作為push數據的棧,用popStack棧作為pop數據的棧。
3. 代碼
#include <iostream> #include <stack> #include <exception> template<class T> class MyQueue { public: void push(const T& num); // 入隊列 T pop(); // 出隊列 T top(); private: std::stack<T> pushStack; std::stack<T> popStack; }; template<typename T> void MyQueue<T>::push(const T& num) { pushStack.push(num); } template<typename T> T MyQueue<T>::pop() { if (pushStack.empty() && popStack.empty()) { // 如果二個棧都為空 throw std::runtime_error("queue is empty"); } else if (popStack.empty()) { // 如果popStack為空,將pushStack全部元素倒popStack while (!pushStack.empty()) { T data = pushStack.top(); // 獲取pushStack棧頂元素 pushStack.pop(); // 出棧 popStack.push(data); } } T data = popStack.top(); popStack.pop(); return data; } template<typename T> T MyQueue<T>::top() { if (pushStack.empty() && popStack.empty()) { // 如果二個棧都為空 throw std::runtime_error("queue is empty"); } else if (popStack.empty()) { // 如果popStack為空,將pushStack全部元素倒popStack while (!pushStack.empty()) { T data = pushStack.top(); // 獲取pushStack棧頂元素 pushStack.pop(); // 出棧 popStack.push(data); } } else { // 如果popStack不為空的話直接返回popStack棧頂 T data = popStack.top(); return data; } } int main() { MyQueue<int> myQueue1; myQueue1.push(1); myQueue1.push(2); myQueue1.push(3); myQueue1.push(4); std::cout << "current pop is:" << myQueue1.pop() << std::endl; std::cout << "current pop is:" << myQueue1.pop() << std::endl; std::cout << "current pop is:" << myQueue1.pop() << std::endl; std::cout << "current pop is:" << myQueue1.pop() << std::endl; std::cout << "current pop is:" << myQueue1.pop() << std::endl; return 0; }
4. 參考文獻
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。