implement the following operations of a queue using stacks.
用队列实现栈的基本思想就是数据先入队列,然后每当要取栈顶也就是队尾元素的时候将队列的队头元素不停的加到最后,直到队尾元素到队头为止。
- push(x) -- Push element x to the back of queue.
- pop() -- Removes the element from in front of queue.
- peek() -- Get the front element.
- empty() -- Return whether the queue is empty.
Implement the following operations of a stack using queues.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- empty() -- Return whether the stack is empty.
class MyQueue {
stack<int> input;
stack<int> output;
public:
/** Initialize your data structure here. */
MyQueue() {
}
/** Push element x to the back of queue. */
void push(int x) {
input.push(x);
}
/** Removes the element from in front of queue and returns that element. */
int pop() {
int tmp = peek();
output.pop();
return tmp;
}
/** Get the front element. */
int peek() {
if(output.empty())
while(!input.empty()){
output.push(input.top()), input.pop();
}
return output.top();
}
/** Returns whether the queue is empty. */
bool empty() {
return input.empty() && output.empty();
}
};
用队列实现栈的基本思想就是数据先入队列,然后每当要取栈顶也就是队尾元素的时候将队列的队头元素不停的加到最后,直到队尾元素到队头为止。
class MyStack {
queue<int> q;
public:
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
q.push(x);
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
for(int i = 0; i < q.size() - 1; ++ i)
q.push(q.front()), q.pop();
int tmp = q.front();
q.pop();
return tmp;
}
/** Get the top element. */
int top() {
int len = q.size();
if(len){
for(int i = 0; i < len-1; ++ i)
q.push(q.front()), q.pop();
}
int tmp = q.front();
q.push(q.front()), q.pop();
return tmp;
}
/** Returns whether the stack is empty. */
bool empty() {
return q.empty();
}
};