题目:用两个队列实现栈的三个基本操作,(1)出栈操作pop。(2)入栈操作push。(3)返回栈顶元素top。 解析:栈是先进后出,队列是先进先出。首先定义两个队列q1和q2,当进行入栈操作时,有两种情况:(1)q1和q2两者都为空,把入栈的元素插入到q1和q2中的任意一个。(2)如果q1(q2)不为空,把入栈元素插入到q1(q2)队尾。当进行出栈操作时,有两种情况:(1)q1和q2都为空,返回false。(2)如果q1(q2)不为空,把q1(q2)中除了队尾的其他元素插入q2(q1)中。同理,返回栈顶元素的操作和出栈的操作相同。实验结果:/*用两个队列完成栈的两个基本操作*/ #include<iostream> #include<queue> using namespace std; class CStack { private: queue<int> q1;//定义q1队列 queue<int> q2;//定义q2队列 public: void push(int val)//入栈操作 { if(q1.empty() && q2.empty())//两个队列都为空 { q1.push(val); } else if(!q1.empty() && q2.empty())//q1不为空 { q1.push(val); } else//q2不为空 { q2.push(val); } } void pop()//出栈操作 { if(q2.empty() && q1.empty()) { return; } else if(!q1.empty() && q2.empty()) { while(q1.size() > 1) { q2.push(q1.front()); q1.pop(); } q1.pop(); } else { while(q2.size() > 1) { q1.push(q2.front()); q2.pop(); } q2.pop(); } } int top()//返回栈顶元素 { int val = -1; if(!q2.empty() || !q1.empty()) { if(!q1.empty() && q2.empty()) { while(q1.size() > 1) { q2.push(q1.front()); q1.pop(); } val = q1.front(); q2.push(val); q1.pop(); } else { while(q2.size() > 1) { q1.push(q2.front()); q2.pop(); } val = q2.front(); q1.push(val); q2.pop(); } } return val; } }; int main(void) { CStack s; s.push(3); s.push(4); cout<<s.top()<<endl; s.pop(); s.push(5); cout<<s.top()<<endl; s.pop(); cout<<s.top()<<endl; s.pop(); system("pause"); return 0; }
4 5 3
用两个队列实现栈
最新推荐文章于 2024-08-01 10:17:51 发布