Implement Stack using Queues
Description
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
, andis 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).
Solution(javascript)
const Queue = () => {
const queue = []
return {
get length() {
return queue.length
},
push: x => queue.push(x),
pop: () => queue.shift(),
top: () => queue[0],
}
}
const MyStack = function () {
this.queue = Queue()
}
/**
* Push element x onto stack.
* @param {number} x
* @return {void}
*/
MyStack.prototype.push = function (x) {
if (this.queue.length === 0) {
this.queue.push(x)
} else {
this.queue.push(x)
for (let i = 1; i <= this.queue.length - 1; i++) {
this.queue.push(this.queue.pop())
}
}
}
/**
* Removes the element on top of the stack and returns that element.
* @return {number}
*/
MyStack.prototype.pop = function () {
return this.queue.pop()
}
/**
* Get the top element.
* @return {number}
*/
MyStack.prototype.top = function () {
return this.queue.top()
}
/**
* Returns whether the stack is empty.
* @return {boolean}
*/
MyStack.prototype.empty = function () {
return this.queue.length === 0
}