JavaScript implements double-ended queue

JavaScript implements double-ended queue

This article example shares the specific code of javascript to implement double-ended queues for your reference. The specific content is as follows

1. Double-ended queue

A deque is a special queue that allows us to add and remove elements from both the front and back ends at the same time.

2. Application of double-ended queues

If a person who has just bought a ticket needs to ask some simple information, he can go back to the head of the line. If the person at the end of the line is in a hurry, he can leave the line.

3. Double-ended queue method

addFront(element): This method adds a new element to the front of the double-ended queue
addBack(element): This method adds a new element to the back end of the double-ended queue (the implementation method is the same as the enqueue method in the Queue class).
removeFront(): This method removes the first element from the front of the double-ended queue
removeBack(): This method removes the first element from the back end of the double-ended queue
peekFront(): This method returns the first element of the double-ended queue.
peekBack()): This method returns the first element at the back end of the double-ended queue.

4. Implementation

class Deque{
           constructor(){
               this.items = {};
               this.count = 0;
               this.lowestCount = 0; 
           }

        // Add a new element to the front of the double-ended queue addFront(element){
            if(this.isEmpty()){
                this.addBack(element);
            }
            else if(this.lowestCount > 0){
                this.lowestCount --;
                this.items[this.lowestCount] = element;
            }
            else{
                for(let i=this.count;i>0;i--){
                    this.items[i] = this.items[i-1]; 
                }
                this.lowestCount = 0;
                this.items[this.lowestCount] = element;
                this.count++;
            }
        };
        addBack(element){
            this.count++;
            this.items[this.count-1] = element;
        };
        removeFront(){
            if(this.isEmpty()){
                return undefined;
            }
            const result = this.items[this.lowestCount];
            delete this.items[this.lowestCount];
            this.lowestCount++;
            return result;
        };
        removeBack(){
            if(this.isEmpty()){
                return undefined;
            }
            const result = this.items[this.count-1];
            delete this.items[this.count-1];
            this.count--;
            return result;
        };
        peekFront(){
            if(this.isEmpty()){
                return null;
            }
          return this.items[this.lowestCount];
        };
        peekBack(){
            if(this.isEmpty()){
                return null;
            }
            return this.items[this.count-1];
        };
        isEmpty(){
            return this.count - this.lowestCount == 0;
        }
        size(){
            return this.count - this.lowestCount;
        }
        toString(){
            if(this.isEmpty()){
                return '';
            }
            let objString = `${this.items[this.lowestCount]}`;
            for(var i=this.lowestCount+1;i<this.count;i++){
                objString = `${objString},${this.items[i]}`;
            }
            return objString;
        }
        clear(){
            this.items={};
            this.count = 0;
            this.lowestCount = 0;
        }
   

       }

       const deque = new Deque();
       deque.addFront('John');
       deque.addFront('Jack');
       deque.addFront('Amy');
       deque.addBack('Lisa');
    // deque.removeFront();
    // deque.removeBack();
    console.log(deque.size());
    console.log(deque.toString());
    console.log(deque);
    console.log(deque.isEmpty());
       console.log(deque.clear());
       console.log(deque);

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • Detailed implementation and application of queues and double-ended queues in JS
  • Write an event queue operation function in js
  • Detailed explanation of the stack method and queue method of JavaScript array
  • JS implementation of queue and stack method
  • Detailed explanation of JavaScript queue functions and asynchronous execution
  • Detailed explanation of the queue example in JS algorithms and data structures
  • JS implementation of queue first-in-first-out function example
  • Circular queue code implemented using array in javascript
  • JavaScript queues, priority queues and circular queues
  • JS implements a method of using two queues to represent a stack

<<:  The most commonly used HTML tags to create web pages

>>:  Use CSS to switch between dark mode and bright mode

Recommend

Overview and Introduction to Linux Operating System

Table of contents 1. What is an Operating System ...

iframe src assignment problem (server side)

I encountered this problem today. I reassigned the...

61 Things Every Web Developer Should Know

Normally, you'll need to read everyone's s...

Vue Basics Introduction: Vuex Installation and Use

Table of contents 1. What is vuex 2. Installation...

Vue implements the right slide-out layer animation

This article example shares the specific code of ...

MySQL transaction, isolation level and lock usage example analysis

This article uses examples to describe MySQL tran...

How to Install Oracle Java 14 on Ubuntu Linux

Recently, Oracle announced the public availabilit...

11 common CSS tips and experience collection

1. How do I remove the blank space of a few pixels...

CSS perfectly solves the problem of front-end image deformation

I saw an article in Toutiao IT School that CSS pe...

CentOS 8 installation diagram (super detailed tutorial)

CentOS 8 is officially released! CentOS fully com...

Add a startup method to Linux (service/script)

Configuration file that needs to be loaded when t...

How to use port 80 in Tomcat under Linux system

Application Scenario In many cases, we install so...

Vue3 slot usage summary

Table of contents 1. Introduction to v-slot 2. An...