232. 用栈实现队列
两个栈,一个in,一个out。out为空时就把in全部加进来
// 两个栈 一个用来出
class MyQueue {
public:
stack<int> sta1;
stack<int> sta2;
MyQueue() {
}
void push(int x) {
sta1.push(x);
}
int pop() {
// 如果栈2有 : 从栈2删除
// 如果栈2没有 : 把栈1全部加入栈2
if (!sta2.size())
{
while (sta1.size())
{
sta2.push(sta1.top());
sta1.pop();
}
}
int res = sta2.top();
sta2.pop();
return res;
}
int peek() {
if (!sta2.size())
{
while (sta1.size())
{
sta2.push(sta1.top());
sta1.pop();
}
}
return sta2.top();
}
bool empty() {
return sta1.empty() && sta2.empty();
}
};
/**
* 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. 用队列实现栈
把队列循环用起来
class MyStack {
public:
queue<int> que; // 循环加入
MyStack() {
}
void push(int x) {
que.push(x);
int size = que.size() - 1;
for (int i = 0; i < size; i ++)
{
int y = que.front();
que.push(y);
que.pop();
}
// test
queue<int> que2 = que;
while (que2.size())
{
que2.pop();
}
}
int pop() {
int res = que.front();
que.pop();
return res;
}
int top() {
return que.front();
}
bool empty() {
return que.empty();
}
};