Lesson 4

Welcome! Today, we're exploring the concept of **Queues** in JavaScript, a fundamental data structure that processes elements in a *First-In, First-Out (FIFO)* order, akin to a line at a food truck. We aim to learn how to implement, analyze, and manipulate queues in JavaScript. Let's dive in!

Imagine you're in line for a roller coaster. The first person in line is always the first to ride. Queues in programming follow this principle, making the queue concept relatively easy to grasp and powerful to use.

Queues can be efficiently implemented in JavaScript using arrays thanks to built-in methods. Take a look at this simple `Queue`

class:

JavaScript`1class Queue { 2 constructor() { 3 this.data = []; // A queue is constructed as an array 4 } 5 enqueue(element) { 6 // The push() method adds an element at the end 7 this.data.push(element); 8 } 9 dequeue() { 10 if(this.isEmpty()) 11 return "Underflow"; // If the queue is empty 12 // The shift() method removes an element from the start 13 return this.data.shift(); 14 } 15 isEmpty() { 16 // The length property checks if the queue is empty 17 return !this.data.length; 18 } 19}`

This `Queue`

class offers `enqueue`

and `dequeue`

operations to manage the queue's state.

The `enqueue`

operation adds to the queue's end. Here's how it works:

JavaScript`1let queue = new Queue(); 2queue.enqueue(1); // 1 is added at the end of the queue 3queue.enqueue(2); // 2 is now at the end, and 1 moves a step forward 4queue.enqueue(3); // 3 joins at the end, pushing 2 and 1 further up 5console.log(queue); // {data: [1, 2, 3]}`

The order of the queue is `{data: [1, 2, 3]}`

, reflecting the FIFO principle.

Consequently, the `dequeue`

operation removes an element from the queue's start:

JavaScript`1let queue = new Queue(); 2queue.enqueue(1); // 1 is the first to join the queue 3queue.enqueue(2); 4queue.enqueue(3); 5queue.dequeue(); // 1 is removed as it was the first to join 6console.log(queue); // {data: [2, 3]}`

Now, the queue reads `{data: [2, 3]}`

, with `1`

dequeued.

The time complexity of enqueue and dequeue operations is constant, `O(1)`

. However, the space complexity of a queue, `O(n)`

, scales with the number of elements, as it demands new memory space for each element.

Queues are ideal when tasks need to be processed in order, wherein the task arriving is completed first. Serving food orders or managing a playlist are perfect instances of this.

Well done! Today, we delved into the world of Queues, understanding their basic operations, computational complexities, and real-world applications. Let's get hands-on and reinforce these concepts with upcoming practice exercises. Here we go!