diff --git a/Data Structures/Queue/Node.js b/Data Structures/Queue/Node.js new file mode 100644 index 0000000..c743e66 --- /dev/null +++ b/Data Structures/Queue/Node.js @@ -0,0 +1,10 @@ +class Node { + constructor(value) { + this.value = value; + this.next = null; + } +} + +module.exports = { + Node +}; diff --git a/Data Structures/Queue/Queue.js b/Data Structures/Queue/Queue.js new file mode 100644 index 0000000..b915c33 --- /dev/null +++ b/Data Structures/Queue/Queue.js @@ -0,0 +1,45 @@ +/** + * Queue for abstract objects. + * + * Reference: + * https://en.wikipedia.org/wiki/Queue_(abstract_data_type) + */ + +// Import modules +const Node = require("./Node").Node; + +class Queue { + constructor() { + this.front = null; + this.back = null; + } + + isEmpty() { + return !this.front; + } + + enqueue(value) { + let node = new Node(value); + if (this.isEmpty()) { + this.front = this.back = node; + } else { + this.back.next = node; + this.back = node; + } + } + + dequeue() { + let node = this.front; + if (!this.isEmpty()) { + this.front = this.front.next; + } + if (this.isEmpty()) { + this.back = null; + } + return node; + } +} + +module.exports = { + Queue +};