Williammer
1/10/2016 - 10:45 AM

Queue data structures implemented in javascript

Normal data structures implemented in languages like javascript etc. plz note that object based data structure perform faster than the array based data structure.

/*

Queue.js

A function to represent a queue

Created by Stephen Morley - http://code.stephenmorley.org/ - and released under
the terms of the CC0 1.0 Universal legal code:

http://creativecommons.org/publicdomain/zero/1.0/legalcode

*/

/* Creates a new queue. A queue is a first-in-first-out (FIFO) data structure -
 * items are added to the end of the queue and removed from the front.
 */
function Queue(){

  // initialise the queue and offset
  var queue  = [];
  var offset = 0;

  // Returns the length of the queue.
  this.getLength = function(){
    return (queue.length - offset);
  }

  // Returns true if the queue is empty, and false otherwise.
  this.isEmpty = function(){
    return (queue.length == 0);
  }

  /* Enqueues the specified item. The parameter is:
   *
   * item - the item to enqueue
   */
  this.enqueue = function(item){
    // queue.push(item);
    queue[queue.length] = item; // alternative faster push
  }

  /* Dequeues an item and returns it. If the queue is empty, the value
   * 'undefined' is returned.
   */
  this.dequeue = function(){

    // if the queue is empty, return immediately
    if (queue.length == 0) return undefined;

    // store the item at the front of the queue
    var item = queue[offset];

    // increment the offset and remove the free space if necessary
    if (++ offset * 2 >= queue.length){
      queue  = queue.slice(offset);
      offset = 0;
    }

    // return the dequeued item
    return item;

  }

  /* Returns the item at the front of the queue (without dequeuing it). If the
   * queue is empty then undefined is returned.
   */
  this.peek = function(){
    return (queue.length > 0 ? queue[offset] : undefined);
  }

}
function Queue() {
  var first, last, item;

  function Item(fn) {
      this.fn = fn;
      this.next = void 0;
  }

  return {
      peek: function peek() {
        return first.fn;
      },
      enqueue: function enqueue(fn) {
          item = new Item(fn);
          if (last) {
              last.next = item;
          } else {
              first = item;
          }
          last = item;
          item = void 0;
      },
      drain: function drain() {
          var f = first;
          first = last = cycle = null;

          while (f) {
              f.fn();
              f = f.next;
          }
      }
  };
}
var queue = [];
queue.push(2);         // [2]
queue.push(5);         // [2, 5]
var i = queue.shift(); // [5] // i = 2