1. 程式人生 > >LeetCode-225-Implement Stack using Queues-M(用佇列實現堆疊)

LeetCode-225-Implement Stack using Queues-M(用佇列實現堆疊)

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 back, peek/pop from front, size, 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).

class MyStack {
 
 private:
  queue<int> q;
  int size;
  
 public:
  MyStack() {
      size=0;
  }
  
  /** Push element x onto stack. */
  void push(int x) {
   
      if(q.size() == 0) {
       q.push(x);
   }
   
   else {
    q.push(x);
    for(int i=0; i<size; i++) {
     q.push(q.front());
     q.pop();
    }
   }
   size++;
  }
  
  /** Removes the element on top of the stack and returns that element. */
  int pop() {
   int ret = q.front();
   q.pop();
      return ret;
  }
  
  /** Get the top element. */
  int top() {
      return q.front();
  }
  
  /** Returns whether the stack is empty. */
  bool empty() {
      return q.size() == 0;
  }
};