Monday, June 15, 2015

225. Implement Stack using Queues -E

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.
Example:
MyStack stack = new MyStack();

stack.push(1);
stack.push(2);  
stack.top();   // returns 2
stack.pop();   // returns 2
stack.empty(); // returns false
Notes:
  • You must use only standard operations of a queue -- which means only push to backpeek/pop from frontsize, and is empty operations are valid.
  • Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
  • You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).

A:

就是简单的,每次都pop()出来,再放到最后去了
class MyStack {
public:
MyStack() {
}
void push(int x) {
D.push_back(x);
}
int pop() {
int n = D.size();
for(int i =0;i<n-1;i++){
int val = *D.begin();
D.pop_front();
D.push_back(val);
}
int res = *D.begin();
D.pop_front();
return res;
}
int top() {
int val = 0;
for(int i =0;i< D.size();i++){
val = *D.begin();
D.pop_front();
D.push_back(val);
}
return val;
}
bool empty() {
return D.empty();
}
private:
deque<int> D;
};

/**
* 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();
*/


Mistakes:

1: 第一遍的时候,理解成是用2个Stack来表示Queue了    太TMD搞笑(Diu Ren)了

2: 注意, D.begin() 返回的是iterator, 需要*

No comments:

Post a Comment