DS#2 Queues

Object Implemenataion of queue.

by bhupendra negi

HTML

<script src="https://rawgit.com/eu81273/jsfiddle-console/master/console.js"></script>

JavaScript

function Queue(capacity) {
  this._capacity = capacity || Infinity;
  this._storage = {};
  this._head = 0;
  this._tail = 0;
}

Queue.prototype.enqueue = function(value) {
  if (this.count() < this._capacity) {
    this._storage[this._tail++] = value;
    return this.count();
  } else {
    return "Max capacity already reached. Remove element before adding a new one.";
  }
}

Queue.prototype.dequeue = function() {
  if (this.count() > 0) {
    var val = this._storage[this._head];
    //console.log(val);
    delete this._storage[this._head] ? this._head++ : this._head;
    return val;
  } else {
    return ("No more item to delete , enqueue some before dequeeing");
  }


}

Queue.prototype.count = function() {
  return this._tail - this._head;
}

Queue.prototype.peek = function() {
  return this._storage[this._head];
}

Queue.prototype.contains = function(val) {
for (var i =this._head;i<this._tail;i++) {
 if (this._storage[i] === val) return true;
}
return false;
}

Queue.prototype.untill = function(val) {
for (var i =this._head;i<this._tail;i++) {
 if (this._storage[i] === val) return  i-this._head+1;
}
return null;
}
// tetsing
var q = new Queue(3);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
console.dir(q);
//console.log(q.enqueue(4));
console.log("deque.....")
console.log(q.dequeue());
console.log(q.dequeue());
console.log(q.dequeue());
console.log(q.dequeue());

console.dir(q);
console.log(q.enqueue(4));
console.dir(q);
console.log("peeking ...");
console.log(q.peek());
console.log(q);