Using stack data structure to implement queue in javascript
This is one way of implementing of the stack to be reused as queue using two stacks.
You may complain you are abusing the memory. But we are not copying the data on both stacks we are using the stacks for switching values only
class Queue {
constructor() {
this.inputStack = [];
this.outputStack = [];
}
enqueue(item) {
this.inputStack.push(item);
}
dequeue(item) {
this.outputStack = [];
if (this.inputStack.length > 0) {
while (this.inputStack.length > 0) {
this.outputStack.push(this.inputStack.pop());
}
}
if (this.outputStack.length > 0) {
console.log(this.outputStack.pop());
this.inputStack = [];
while (this.outputStack.length > 0) {
this.inputStack.push(this.outputStack.pop());
}
}
}
listIn() {
let i=0;
while(i < this.inputStack.length) {
console.log(this.inputStack[i]);
i++;
}
}
listOut() {
let i=0;
while(i < this.outputStack.length) {
console.log(this.outputStack[i]);
i++;
}
}
}
*There is part left out for improvement and refactoring. But, can you see a way to use only one while rather than two whiles and make it a bit efficient?