1. 基礎(chǔ)
隊(duì)列:先進(jìn)先出,即插入數(shù)據(jù)在隊(duì)尾進(jìn)行,刪除數(shù)據(jù)在隊(duì)頭進(jìn)行;
棧:后進(jìn)先出,即插入與刪除數(shù)據(jù)均在棧頂進(jìn)行。
2. 思路
兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的思想:用pushStack棧作為push數(shù)據(jù)的棧,用popStack棧作為pop數(shù)據(jù)的棧。

3. 代碼
#include <iostream>#include <stack>#include <exception>template<class T> class MyQueue { public: void push(const T& num); // 入隊(duì)列 T pop(); // 出隊(duì)列 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()) { // 如果二個(gè)棧都為空 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()) { // 如果二個(gè)棧都為空 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. 參考文獻(xiàn)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)武林網(wǎng)的支持。
新聞熱點(diǎn)
疑難解答