剑指offer--两个栈实现一个队列

来源:互联网 发布:数据库的垂直拆分 编辑:程序博客网 时间:2024/05/14 13:59

两个队列实现一个栈链接:两个队列实现一个栈

:先进后出; 队列:先进先出。

思路:

我们可以利用两个栈,s1,s2。首先入队时,在s1入栈。如果想要出队,首先判断栈s2是否为空,如为空,把s1的元素压入s2;即,s1栈底的元素就到了s2的栈顶,就可以pop出去。若不为空,直接s2 pop;若入队,直接入栈s1,当出队时,如果s2不为空就pop s2,如果s2为空,就把s1的元素导入s2。

例如: 


#include<iostream>#include<stack>#include<assert.h>using namespace std;template<class T>class Queue{public:void Push(const T& x){s1.push(x);}void Pop(){if (s2.empty()){if (s1.empty())//队列为空{assert(false);}else{//把S1的数据导入s2;while (!s1.empty()){s2.push(s1.top());s1.pop();}}s2.pop();}}protected:stack<T> s1;stack<T> s2;};void Test(){Queue<int> q;q.Push(1);q.Push(2);q.Push(3);q.Push(4);q.Pop();}int main(){Test();system("pause");return 0;}




0 0