C/C++面试题—使用STL两个队列实现一个栈
生活随笔
收集整理的這篇文章主要介紹了
C/C++面试题—使用STL两个队列实现一个栈
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目介紹
使用STL中的兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧,實(shí)現(xiàn)棧的top、pop、push、clear等操作。
思路分析
思路和使用2個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列是相通的,用一個(gè)隊(duì)列queue1容器用來(lái) 壓棧,出棧的時(shí)候判斷queue1.size()是否大于1,大于1的話隊(duì)尾元素是棧頂需要彈出,這時(shí)就用到了queue2,將queue1其他的元素倒騰到queue2中,queue1中剩下的那一個(gè)元素就是棧頂?shù)脑亓恕O麓卧倮^續(xù)出棧,如果queue1中沒(méi)有元素 就判斷queue2中的元素,queue2的隊(duì)尾為棧頂,將其他元素倒騰到queue1中。
代碼展示
/*使用STL,用兩個(gè)隊(duì)列來(lái)實(shí)現(xiàn)一個(gè)棧,完成棧的push,pop,top,clear */ #include <queue> #include <stack> #include <iostream> using namespace std;template<typename T> class MyStack { public:void clear(){if (queue1.size() > 0)queue1.swap(queue<T>());if (queue2.size() > 0)queue2.swap(queue<T>());}T top() //棧頂就是 隊(duì)列的最后一個(gè)元素,和pop函數(shù)十分類(lèi)似{while (queue1.size() > 1)//queue1的隊(duì)尾元素是棧頂元素,將其余的倒騰到queue2中去{T front = queue1.front();queue1.pop();queue2.push(front);}if (queue1.size() == 1){T front = queue1.front();//queue1.pop();return front;}while (queue2.size() > 1)//queue1沒(méi)有元素,queue2有元素,queue2的隊(duì)尾為棧頂元素,將其余的倒騰到queue1中去{T front = queue2.front();queue2.pop();queue1.push(front);}if (queue2.size() == 1){T front = queue2.front();//queue2.pop();return front;}throw std::exception("queue is empty");}void push(T data) //壓棧{queue1.push(data);}T pop() //將棧頂元素彈出{while (queue1.size() > 1)//queue1的隊(duì)尾元素是棧頂元素,將其余的倒騰到queue2中去{T front = queue1.front();queue1.pop();queue2.push(front);}if (queue1.size() == 1){T front = queue1.front();queue1.pop();return front;}while (queue2.size() > 1)//queue1沒(méi)有元素,queue2有元素,queue2的隊(duì)尾為棧頂元素,將其余的倒騰到queue1中去{T front = queue2.front();queue2.pop();queue1.push(front);}if (queue2.size() == 1){T front = queue2.front();queue2.pop();return front;}throw std::exception("queue is empty");} private:queue<T> queue1; //用來(lái)壓棧queue<T> queue2; //輔助容器 };int main(int argc, char *argv[]) {MyStack<int> stack;stack.push(1);stack.push(2);stack.push(3);int top = stack.top();//3cout << "top = " << top << endl; //3int n1 = stack.pop();int n2 = stack.pop();top = stack.top();cout << "top = " << top << endl; //1int n3 = stack.pop();cout << n1 << " "<< n2 << " " << n3 << endl; //入棧 1 2 3 ->出棧 3 2 1stack.clear();stack.push(100);stack.push(200);stack.push(300);n1 = stack.pop();n2 = stack.pop();n3 = stack.pop();cout << n1 << " " << n2 << " " << n3 << endl; //入棧 100 200 300 ->出棧 300 200 100return 0; }運(yùn)行測(cè)試
總結(jié)
以上是生活随笔為你收集整理的C/C++面试题—使用STL两个队列实现一个栈的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux C线程同步的三种方法
- 下一篇: C++实现对象序列化和反序列化(读写二进