232.用栈实现队列
可以模拟一下整个过程,stin和stout的顺序是相反的,要注意的是,pop的时候要先判断stout里有没有元素,应该有限pop stout的元素,因为stin的元素一定比stout 的元素更晚到,我们要遵循先入先出的原则。注意,stack的pop是void类型。
class MyQueue {
public:
stack<int> stin;
stack<int> stout;
MyQueue() {
}
void push(int x) {
stin.push(x);
}
int pop() {
if(stout.empty())
{
while(!stin.empty())
{
stout.push(stin.top());
stin.pop();
}
}
int result=stout.top();
stout.pop();
return result;
}
int peek() {
int result=this->pop();
stout.push(result);
return result;
}
bool empty() {
return stin.empty()&&stout.empty();
}
};
225. 用队列实现栈
只需要一个队列就够了,pop的话把front都放到后面,把back露出来再pop就行了。要注意在while里push之后一定要pop多余元素。
class MyStack {
public:
MyStack() {
}
queue<int> q;
void push(int x) {
q.push(x);
}
int pop() {
int size=q.size()-1;
while(size--)
{
q.push(q.front());
q.pop();
}
int result=q.front();
q.pop();
return result;
}
int top() {
return q.back();
}
bool empty() {
return q.empty();
}
};