DEV Community

miku86
miku86

Posted on

JavaScript Data Structures: Queue: Enqueue

Intro

Last time, we learned what a Queue is and set it up.

Today, we learn how to enqueue / add a new node to the end of the Queue.


Starter Code ▶️

We start with the code from the last part.

class Node { constructor(value) { this.value = value; this.next = null; } } class Queue { constructor() { this.length = 0; this.start = null; this.end = null; } } 
Enter fullscreen mode Exit fullscreen mode

Thoughts 💭

First, we should think about the constraints and possibilities:

If the Queue is empty:

  • create a new node
  • set the new node as start and end
  • increase the queue's length by 1
  • return the new node

All remaining cases:

  • create a new node
  • set the new node as the end's next node
  • set the new node as the new end
  • increase the queue's length by 1
  • return the new node

Example

// current queue: A (start) ==> B (end) // desired queue: A (start) ==> B ==> C (end) 
Enter fullscreen mode Exit fullscreen mode

Steps:

// current queue: A (start) ==> B (end) // set the new node as the end's next node A (start) ==> B (end) ==> C // set the new node as the new end A (start) ==> B ==> C (end) // desired queue: A (start) ==> B ==> C (end) 
Enter fullscreen mode Exit fullscreen mode


Implementation 📝

class Node { constructor(value) { this.value = value; this.next = null; } } class Queue { constructor() { this.length = 0; this.start = null; this.end = null; } enqueue(value) { // create a new node const newNode = new Node(value); if (!this.length) { // set the new node as start and end this.start = newNode; this.end = newNode; } else { // set the new node as the end's next node this.end.next = newNode; // set the new node as the new end this.end = newNode; } // increase the queue's length by 1 this.length += 1; // return the new node return newNode; } } 
Enter fullscreen mode Exit fullscreen mode

Result

Let's have a look how to use the enqueue method and its results.

const newQueue = new Queue(); // empty queue console.log(newQueue); // Queue { length: 0, start: null, end: null } console.log(newQueue.enqueue("new A")); // Node { value: 'new A', next: null } // queue with 1 node console.log(newQueue); // Queue { // length: 1, // start: Node { value: 'new A', next: null }, // end: Node { value: 'new A', next: null } // } console.log(newQueue.enqueue("new B")); // Node { value: 'new B', next: null } // queue with 2 nodes console.log(newQueue); // Queue { // length: 2, // start: Node { value: 'new A', next: Node { value: 'new B', next: null } }, // end: Node { value: 'new B', next: null } // } 
Enter fullscreen mode Exit fullscreen mode


Next Part ➡️

We will implement our next method to dequeue the first node.

Don't miss interesting stuff, subscribe!


Questions ❔

  • Do you see some similarities to the Singly Linked List or Doubly Linked List?

Top comments (0)