您的位置:首页 > Web前端

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

2017-04-05 22:36 288 查看
两个队列实现一个栈链接:两个队列实现一个栈

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

思路:

我们可以利用两个栈,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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer