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.
Example:
MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // returns 1 queue.pop(); // returns 1 queue.empty(); // returns false
Notes:
You must use only standard operations of a stack -- which means only push to top, peek/pop from top, size, and is empty operations are valid.
Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
```Java
class MyQueue {
private int[] items;
private int size;
private int head;
private int tail;
private int len;
/** Initialize your data structure here. */ public MyQueue() { items = new int[10]; size = 0; head = 0; tail = 0; len = 0; } /** Push element x to the back of queue. */ public void push(int x) { items[tail++] = x; if (tail == size) { resize(2*size); } len++; } /** Removes the element from in front of queue and returns that element. */ public int pop() { len--; return items[head++]; } /** Get the front element. */ public int peek() { return items[head]; } /** Returns whether the queue is empty. */ public boolean empty() { return (len==0); } private void resize(int newSize) { int newItems[] = new int[newSize]; for (int i = head, j = 0; i <= tail; i++, j++) { newItems[i] = items[j]; } head = 0; tail = items.length; size = newSize; items = newItems; }
}
/*
* 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();
* boolean param_4 = obj.empty();
/
```
近期评论