232. 用栈实现队列
class MyQueue {
private:
stack <int> in;
stack <int > out;
public:
MyQueue() {
}
void push(int x) {
in.push( x );
}
int pop() {
while(!in.empty())
{
out.push(in.top());
in.pop();
}
int res = out.top();
out.pop();
while(!out.empty())
{
in.push(out.top());
out.pop();
}
return res;
}
int peek() {
while(!in.empty())
{
out.push(in.top());
in.pop();
}
int res = out.top();
while(!out.empty())
{
in.push(out.top());
out.pop();
}
return res;
}
bool empty() {
if(in.empty())
{
return 1;
}
return 0;
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
225. 用队列实现栈
class MyStack {
public:
MyStack() {
}
queue <int> in;
queue <int> out;
void push(int x) {
in.push(x) ;
}
int pop() {
int res;
if(!in.empty())
{
while(in.size() > 1)
{
out.push(in.front());
in.pop();
}
res = in.front();
in.pop();
}
else
{
while(out.size() > 1)
{
in.push(out.front());
out.pop();
}
res = out.front();
out.pop();
}
return res;
}
int top() {
if(in.empty())
{
return out.back();
}
else
{
return in.back();
}
}
bool empty() {
if(in.empty() && out.empty())
{
return 1;
}
return 0;
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
比232略难,232是两个杯子来回倒水,225是用漏斗倒水,每次漏斗中留有一个元素。