la estructura de datos versión JS _03 colas de ciclo

la estructura de datos versión JS _03 colas de ciclo

EDITORIAL, a pesar de haberse logrado la prueba de código en preparación. Pero limitado nivel de blanco. Hay demasiado mal considerados

En este post usted aprenderá:

  • cola circular
  • aplicaciones relacionadas con la cola de comprobación: palíndromo

1. La circulación de la cola

Aquí Insertar imagen Descripción
El llamado cola circular, pero la cola es una variante de lo común. Es inclusivo cola común configurado para conectar la estructura de anillo lógico, debido a que el tamaño de la cola se fija se puede prevenir más simplemente maniquí se produce desbordamiento.

Echemos un vistazo a lograrlo (siendo la misma lección, cap privada variables miembro, o escribir la idea principal)
las siguientes funciones:

  • estaVacia condenado vacía
  • isFull frase completa
  • put (e) el tapón de cola
  • poll () el jefe del equipo de toma

Condenado esta cola circular condición de lleno donde solía: también dentro de una posición vacante. Eso habría puesto la posición máxima se establece cinco puse 4 que está lleno. El objetivo principal es prevenir y condenado esperado en condiciones vanos

class SqQueue {
            constructor() {
                this.front = 0;
                this.rear = 0;
                this.items = {};
                this.MAX = 5; //这里我们人为规定此循环队列的长度为5
            }

            // 向队尾新加元素
            put(e) {
                // 先判满
                if (this.isFull()) {
                    return "full";
                } else {
                    this.items[this.rear] = e;
                    this.rear = (this.rear + 1) % this.MAX;//因为是个环所以不允许它有大于等于5的存在。环的指针下标在0-4.poll中同理
                }
            }
            // 从对头取出元素
            poll() {
                    // 先判空
                    if (this.isEmpty()) {
                        console.log(11);
                        return undefined;
                    } else {
                        const res = this.items[this.front];
                        delete this.items[this.front];
                        this.front = (this.front + 1) % this.MAX;
                        return res;
                    }
                }
                // 判空
            isEmpty() {
                    return this.front === this.rear;
                }
                // 判满
            isFull() {
                // 采用的是此循环队列仅空余一个为满
                return this.front == ((this.rear + 1) % this.MAX);
            }
        }

//部分测试代码:
        let q = new SqQueue();
        q.put(1);
        q.put(2);
        q.put(3);
        q.put(4);
        console.log(q.poll());
        console.log(q.poll());
        console.log(q.poll());
        q.put(2);
        q.put(3);
        q.put(4);
        console.log(q.poll());
        console.log(q.poll());
        console.log(q.poll());
        console.log(q.poll());
        q.put(4);
        console.log(q);

Aplicación: palíndromo del inspector

¿Qué es un palíndromo: palíndromo es una positiva y negativa puede leer a través de la palabra, frase, número o una serie de secuencias de caracteres, como señora o de carreras.
Hay muchos controles palíndromo algoritmo es probablemente el más fácil es mirar a la salida de la dirección de la cadena palíndromo, y luego hacer una comparación con la cadena original. Posiblemente el más simple es la pila de (no se considera aquí abajo utilizar ciclo), pero aquí para ver el uso de la cola de doble extremo será más simple que el uso de la pila.
Implementado
en un deque de clase tienen, en el que usan directamente el
deque clase


	        class Queue {
            constructor() {
                this.count = 0; //用于记录队列内的元素个数,也是用作指向队尾的指针
                this.lowesCount = 0; //用于追踪对头元素的指针
                this.items = {}; //用于存储队列元素的数据结构,当然也可以使用数组,但是使用对象获取元素更加高效
            }

            size() {
                // 你要搞清楚有元素时这个this.count是指向的队尾的后一个,放的时候可是先放,再让它加的1
                return this.count - this.lowesCount;
            }
            addFront(e) {
                if (this.isEmpty()) {
                    this.addBack(e)
                } else {
                    // 搞清楚现在谁指着队头呢
                    this.lowesCount--;
                    this.items[this.lowesCount] = e;
                }

            }
            addBack(e) {
                this.items[this.count] = e;
                this.count++
            }
            removeFront() {
                // 先判非空
                if (this.isEmpty()) {
                    return undefined;
                } else {
                    const result = this.items[this.lowesCount];
                    delete this.items[this.lowesCount];
                    // 指针后移
                    this.lowesCount++;
                    return result;
                }
            }
            removeBack() {
                if (this.isEmpty()) {
                    return undefined;
                } else {
                    // 谁指向队尾呢,this.count指向的是队尾的下一个
                    let result = this.items[this.count - 1];
                    delete this.items[this.count - 1];
                    this.count--;
                    return result;
                }
            }
            isEmpty() {
                // 什么时候为空呢,这里希望你有写c的数据结构的基础,为空时队头队尾指针指向同一地方
                return this.count === this.lowesCount;
            }
        }
        
       

métodos de inspección para lograr palíndromo:

 function anagrams(s) {
            // 对字符串做一些预处理
            if (s === undefined || s === null || (s !== null && s.length == 0)) {
                return false;
            }
            // 字母全变小写并去除空格,trim不可去除内部的
            s = s.toLocaleLowerCase().split(" ").join("");
            let q = new Queue();
            let flag = true;
            // 搞一个双端队列的实例
            // 回文入队
            for (let i = 0; i < s.length; i++) {
                q.addBack(s.charAt(i));
            }
            // 两端出队的同时进行比较
            while (q.size() > 1 && flag) {
                let l = q.removeBack();
                let r = q.removeFront();
                if (l !== r) {
                    flag = false;
                }
            }
            // q.size==1时肯定是个回文,就一个字符不用比较了就
            return flag;
        }
Publicado 68 artículos originales · ganado elogios 82 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_41086511/article/details/105308146
Recomendado
Clasificación