232.用栈实现队列
思路:
定义两个栈(一个“进”栈,一个“出”栈)
1.push实现:将一个元素push进stIn。
2.pop实现:将stIn里的元素全部push到stOut(将顺序掉个个),此时就实现了将栈底的元素push出去的功能。
3.peek实现:调用pop函数,获取队列中的第一个元素。但同时把这个元素给弹出来了,要塞回去。
4.empty实现:stIn和stOut两个栈都为空,则判定队列为空。
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 res = this->pop();
stOut.push(res);
return res;
}
bool empty() {
return stIn.empty()&&stOut.empty();
}
};
225. 用队列实现栈
方法一:用两个队列实现
思路:
定义两个队列que1和que2
1.push实现:把元素往队列1里push就行
2.pop操作:把队列一的元素送进队列二,只剩最后一个元素,pop的目标就是他,记录后弹出,令que1等于que2,再重复此操作。
3.top实现:把队列尾部的元素弹出
4.empty实现:que1为空队列,则为空栈
class MyStack {
public:
queue<int>que1;
queue<int>que2;
MyStack() {
}
void push(int x) {
que1.push(x);
}
int pop() {
int size = que1.size();
size--;
while (size--) {
que2.push(que1.front());
que1.pop();
}
int result = que1.front();
que1.pop();
que1 = que2;
while (!que2.empty()) {
que2.pop();
}
return result;
}
int top() {
return que.back();
}
bool empty() {
return que.empty();
}
};
方法二:用一个队列实现
定义一个队列que
1.push实现:把元素往队列里push就行
2.pop操作:把队列前面的元素送进队列尾部,只剩最后一个元素没有被操作,pop的目标就是它,记录后弹出,再重复此操作。
3.top实现:把队列尾部的元素弹出
4.empty实现:que为空队列,则为空栈
class MyStack {
public:
queue<int>que;
MyStack() {
}
void push(int x) {
que.push(x);
}
int pop() {
int size=que.size();
size--;
while(size--){
que.push(que.front());
que.pop();
}
int result=que.front();
que.pop();
return result;
}
int top() {
return que.back();
}
bool empty() {
return que1.empty();
}
};