232.用栈实现队列
class MyQueue {
stack<int> staIn; //输入
stack<int> staOut; //输出
public:
MyQueue() { }
void push(int x) {
staIn.push(x); //输入直接输入至staIn
}
int pop() {
//每次出队时要判定输出栈是否为空
if(staOut.empty()){
while(!staIn.empty()){ //若为空将staIn的元素移动到是staOut中
staOut.push(staIn.top());
staIn.pop();
}
}
int res = staOut.top(); //记录staOut的栈顶值即为需要删除的元素
staOut.pop();
return res;
}
int peek() {
int res = this -> pop(); //使用自定义的pop, 但是需要将pop的值重新加入Out栈
staOut.push(res);
return res;
}
bool empty() {
return staIn.empty() & staOut.empty();
}
};
注意:绘图理解栈实现队列的过程
225. 用队列实现栈
class MyStack {
queue<int>que1; //主操作队列
queue<int>que2;
public:
MyStack() {}
void push(int x) {
que1.push(x); //队列1加入元素
}
int pop() {
int sizelen = que1.size()-1; //pop时将que1的元素删除至最后一个
while(sizelen--){ //其他元素移动到que2中
que2.push(que1.front());
que1.pop();
}
int res = que1.front(); //即为元素的顶值
que1.pop();
que1 = que2;
while(!que2.empty()){ //再将que2的值赋给que1,即可
que2.pop();
}
return res;
}
int top() {
return que1.back(); //使用que1的back函数
}
bool empty() {
return que1.empty();
}
};