232.用栈实现队列
方法:
本质 利用两个栈实现 先入先出
定义两个栈 一个栈放入数据st_in 一个栈弹出数据st_out
注意:
代码:
class MyQueue {
public:
stack<int>st_in;
stack<int>st_out;
MyQueue() {
}
void push(int x) {
st_in.push(x);
}
int pop() {
if(st_out.empty()){
while(!st_in.empty()){
st_out.push(st_in.top());
st_in.pop();
}
}
int res= st_out.top();
st_out.pop();
return res;
}
int peek() {
if(st_out.empty()){
while(!st_in.empty()){
st_out.push(st_in.top());
st_in.pop();
}
}
return st_out.top();
}
bool empty() {
if(st_in.empty() && st_out.empty()){
return true;
}
return false;
}
};
/**
* 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. 用队列实现栈
方法:
定义两个队列,q1, q2 q2是q1的备份
插入数据: 将数据插入q1
移除并返回栈顶元素: 将q1的前n-1个数插入到q2中, 并从q1中弹出,输出q1.front()
将q2的数据导入到q1中, 并删除q2中的数据。
返回栈顶元素:返回q1.back()
如果栈是空的,返回 true ;否则,返回 false : 如果q1为空则返回 true 否则返回false
注意:
代码:
class MyStack {
public:
queue<int>q1;
queue<int>q2;
MyStack() {
}
void push(int x) {
q1.push(x);
}
int pop() {
int size = q1.size();
size--;
while(size--){
q2.push(q1.front());
q1.pop();
}
int res = q1.front();
q1.pop();
q1 =q2;
while(!q2.empty()){
q2.pop();
}
return res;
}
int top() {
return q1.back();
}
bool empty() {
return q1.empty() &&q2.empty();
}
};
/**
* 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();
*/