注意实际上真实库函数的stack和queue的pop都是没有返回值的
#232
class MyQueue {
public:
stack<int> sin;
stack<int> sout;
MyQueue() {
//nothing, already initialized
}
void push(int x) {
sin.push(x);
}
int pop() {
//move sin to sout
if(sout.empty()){
while(!sin.empty()){
int tmp=sin.top();
sin.pop();
sout.push(tmp);
}
}
//pop first one in sout
int res=sout.top();
sout.pop();
//move sout back to sin
while(!sout.empty()){
int tmp=sout.top();
sout.pop();
sin.push(tmp);
}
return res;
}
int peek() {
/*
//move sin to sout
while(!sin.empty()){
int tmp=sin.top();
sin.pop();
sout.push(tmp);
}
//top
int res=sout.top();
//move sout back to sin
while(!sout.empty()){
int tmp=sout.top();
sout.pop();
sin.push(tmp);
}
return res;
*/
int res=this->pop();
sout.push(res);
return res;
}
bool empty() {
return sin.empty()&&sout.empty();
}
};
#225
class MyStack {
public:
queue<int> qin;
queue<int> qout;
MyStack() {
//do nothing, already do initialize
}
void push(int x) {
qin.push(x);
}
int pop() {
while(qin.size()>1){
int tmp=qin.front();
qin.pop();
qout.push(tmp);
}
int res=qin.front();
qin.pop();
while(!qout.empty()){
int tmp=qout.front();
qout.pop();
qin.push(tmp);
}
return res;
}
int top() {
while(qin.size()>1){
int tmp=qin.front();
qin.pop();
qout.push(tmp);
}
int res=qin.front();
qin.pop();
qout.push(res);
while(!qout.empty()){
int tmp=qout.front();
qout.pop();
qin.push(tmp);
}
return res;
}
bool empty() {
return qin.empty();
}
};