Introducción: en la vida diaria, las personas a menudo usan listas. Por ejemplo, cuando a veces tenemos que ir de compras, para comprar todas las cosas que queremos comprar antes de ir, que es la lista de las cosas que necesitamos usar. O cuando estábamos en la escuela cuando éramos jóvenes, después de cada examen, la escuela enumerará las clasificaciones y las transcripciones de los diez mejores estudiantes en este examen, etc. Todas estas son listas de la lista. También utilizamos listas en nuestras computadoras, entonces, ¿dónde es la lista adecuada para su uso? ¿Dónde no es adecuado para su uso?
Adecuado para su uso: cuando no hay muchos elementos en la lista, puede usar la lista porque la eficiencia es muy alta al buscar o clasificar los elementos en la lista. Por el contrario, si hay muchos elementos en la lista, no es adecuado para el uso de la lista.
1: Tipo de datos abstracto Definición de la lista
Para diseñar el tipo de datos abstractos de una lista, debemos dar una definición de la lista, incluido qué atributos debe tener la lista, qué operaciones deben realizarse en la lista, etc.
Una lista es un conjunto de datos ordenado. Los elementos de datos en cada lista se llaman elementos. En JavaScript, los elementos en la lista pueden ser de cualquier tipo de datos. No hay un acuerdo previo sobre cuántos elementos se pueden guardar en la lista. Sin embargo, el número de elementos está limitado por la memoria del programa cuando realmente se usa.
Ahora queremos diseñar una lista, entonces podemos pensar en implementar una lista. ¿Qué atributos y métodos deberían contener? Por supuesto, mis diseños a continuación están diseñados en base a las demostraciones en el libro "Estructuras y algoritmos de datos JavaScript". Por lo tanto, podemos aprender a diseñar nuestras propias clases abstractas como referencia cuando escribimos programas en el futuro. Lo más importante que aprendemos sobre las demostraciones en el libro es aprender sus ideas de diseño y cómo escribir código. Tienen los siguientes atributos;
1. ListSize (Propiedad): use una variable ListSize para guardar el número de elementos en la lista.
2. Pos (propiedad): la posición actual de la lista, el índice del elemento.
3. DataStore (propiedad): inicialice una matriz vacía para guardar el número de elementos. Si queremos obtener los elementos en la lista específica, podemos usar el atributo POS anterior; como DataStore [POS];
Todos los métodos; La siguiente lista se explicará y no se introducirá una por una.
Dos: cómo implementar clases de lista
Según el tipo de datos de abstracto de la lista definido anteriormente, podemos implementar la siguiente clase de lista, de la siguiente manera a través del patrón Constructor + Prototype.
La copia del código es la siguiente:
funciones list () {
// Número de elementos en la lista
this.listSize = 0;
// ¿Cuál es la posición actual de la lista?
this.pos = 0;
// Inicializar una matriz vacía para guardar elementos de la lista
this.datastore = [];
}
List.prototype = {
// Agregar un elemento al final de la lista
append: function (elemento) {
var self = this;
self.datastore [this.ListSize ++] = elemento;
},
// eliminar elementos de la lista
eliminar: function (elemento) {
var self = this;
var curindex = self.find (elemento);
if (curindex> -1) {
self.datastore.splice (Curindex, 1);
--Self.listSize;
devolver verdadero;
}
devolver falso;
},
// Encuentra elementos en la lista para devolver el índice
find: function (elemento) {
var self = this;
para (var i = 0, dataLen = self.datastore.length; i <dataLen; i ++) {
if (self.datastore [i] == elemento) {
regresar i;
}
}
regreso -1;
},
// devuelve el número de elementos en la lista
longitud: function () {
devolver esto.listSize;
},
// Mostrar elementos en la lista
toString: functer () {
devolver esto.datastore;
},
/*
* Inserte un elemento después del elemento especificado
* @param elemento elemento actual
* @param elementofter inserte el elemento actual detrás de este elemento
*/
insertar: function (elemento, elementofter) {
var self = this;
var insertpos = self.Find (elementAfter);
if (insertpos> -1) {
self.datastore.splice (InsertPos+1,0, elemento);
++ self.listize;
devolver verdadero;
}
devolver falso;
},
// Borrar todos los elementos de la lista
claro: function () {
Eliminar esto. Datastore;
this.datastore = [];
this.ListSize = this.pos = 0;
},
// Determinar si el elemento dado está en la lista
contiene: function (elemento) {
var self = this;
para (var i = 0, ilen = self.datastore.length; i <ilen; i ++) {
if (self.datastore [i] == elemento) {
devolver verdadero;
}
}
devolver falso;
},
// mover el elemento actual en la lista a la primera posición
front: function () {
this.pos = 0;
},
// mover el elemento actual en la lista a la última posición
end: function () {
this.pos = this.listSize - 1;
},
// mover la posición actual uno por uno
Prev: function () {
if (this.pos> 0) {
--THIS.POS;
}
},
// mover la posición actual uno por uno
Siguiente: function () {
if (this.pos <this.ListSize - 1) {
++ this.pos;
}
},
// Vuelve a la ubicación actual de la lista
curpos: functer () {
devolver esto.pos;
},
// mover la posición actual a la posición especificada
Moveto: function (n) {
this.pos = n;
},
// devuelve el elemento en la posición actual
getElement: function () {
devuelve this.datastore [this.pos];
}
};
Como se indicó anteriormente: Implemente una clase de lista, incluidos tantos métodos como anteriormente. Por supuesto, también podemos extender otros métodos para enriquecer la implementación de la clase de lista. Lo más importante es aprender el método de codificación como el anterior.