Skip to content

Latest commit

 

History

History
89 lines (70 loc) · 1.32 KB

js-implementation.md

File metadata and controls

89 lines (70 loc) · 1.32 KB
class ArrayQueue {

  constructor() {
    this.list = [];
  }

  enqueue(value) {
    this.list.push(value)
  }

  dequeue() {
    return this.list.shift()
  }

  get front() {
    return this.list[0];
  }

  get isEmpty() {
    return this.list.length === 0;
  }

}

class LLQueue {
  constructor() {
    this.list = new LinkedList()
  }

  enqueue(value) {
    if (this.list.tail === null) {
      this.list.tail = node
      this.list.head = node
    } else {
      let tail = this.list.tail
      tail.next = node
      this.list.tail = node
    }
  }

  dequeue() {
    if (this.list.head === null) {
      return;
    } 
    
    if (this.list.head === this.list.tail) {
      let value = this.list.head.value
      this.list.head = null
      this.list.tail = null
      return value
    }

    let head = this.list.head
    this.list.head = head.next
    return head.value    
  }

  get front() {
    if (this.list.head === null) {
      return
    }
    return this.list.head.value
  }

  get isEmpty() {
    return this.list.head === null
  }
}

// Helper classes

class Node {
  constructor(value, next) {
    this.value = value
    this.next = next
  }
}

class LinkedList {
  constructor() {
    this.head = null
    this.tail = null
  }
}