题目:
Implement the following operations of a queue using stacks.
push to top
, peek/pop from top
, size
, and is empty
operations are valid.数据结构。
C++版:
class Queue { public: stack<int> s1, s2; // Push element x to the back of queue. void push(int x) { s1.push(x); } // Removes the element from in front of queue. void pop(void) { if(s2.empty()) { while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } } if(!s2.empty()) s2.pop(); } // Get the front element. int peek(void) { if(s2.empty()) { while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } } if(!s2.empty()) return s2.top(); } // Return whether the queue is empty. bool empty(void) { return s1.empty() && s2.empty() ? true : false; } };
class MyQueue { // Push element x to the back of queue. Stack<Integer> s1 = new Stack<>(); Stack<Integer> s2 = new Stack<>(); public void push(int x) { s1.push(x); } // Removes the element from in front of queue. public void pop() { if(s2.empty()) { while(!s1.empty()) s2.push(s1.pop()); } if(!s2.empty()) s2.pop(); } // Get the front element. public int peek() { if(s2.empty()) { while(!s1.empty()) s2.push(s1.pop()); } if(!s2.empty()) return s2.peek(); return -1; } // Return whether the queue is empty. public boolean empty() { return s1.empty() && s2.empty() ? true : false; } }
class Queue(object): def __init__(self): """ initialize your data structure here. """ self.s1, self.s2 = [], [] def push(self, x): """ :type x: int :rtype: nothing """ self.s1.append(x) def pop(self): """ :rtype: nothing """ if len(self.s2) == 0: while len(self.s1) != 0: self.s2.append(self.s1[-1]) self.s1.pop() if len(self.s2) != 0: self.s2.pop() def peek(self): """ :rtype: int """ if len(self.s2) == 0: while len(self.s1) != 0: self.s2.append(self.s1[-1]) self.s1.pop() if len(self.s2) != 0: return self.s2[-1] return None def empty(self): """ :rtype: bool """ if len(self.s1) == 0 and len(self.s2) == 0: return True return False