Let's just hide that the Stack is implemented with an array, so that we're not tempted to use other methods as shift() 😇
class Stack { // Just to hide the use of array implementation constructor() { this._items = []; } push(data) { this._items.push(data); } pop() { return this._items.pop(); } length() { return this._items.length; } } class Queue { constructor() { this._stack = new Stack(); } enqueue(data) { this._stack.push(data); } dequeue() { if (this._stack.length() === 1) return this._stack.pop(); else { var tmp = this._stack.pop(), result = this.dequeue(); this.enqueue(tmp); return result; } } }
- class Stack { // Just to hide the use of array implementation
- constructor() {
- this._items = [];
- }
- push(data) {
- this._items.push(data);
- }
- pop() {
- return this._items.pop();
- }
- length() {
- return this._items.length;
- }
- }
- class Queue {
- constructor() {
this._stack = []; // We will be using this array as a stack - only// its push and pop operations will ever be called- this._stack = new Stack();
- }
- enqueue(data) {
- this._stack.push(data);
- }
- dequeue() {
if (this._stack.length === 1)- if (this._stack.length() === 1)
- return this._stack.pop();
- else {
- var tmp = this._stack.pop(), result = this.dequeue();
- this.enqueue(tmp);
- return result;
- }
- }
- }