Definición del Tipo Abstracto de Datos (TAD) Lista
Una lista representa una colección ordenada de elementos donde cada posición tiene un suceser y predecesor, excepto los extremos. Permite operaciones básicas como inserción, eliminación y recorrido secuencial.
Clase Lista en JavaScript
Implementamos una lista con funcionalidad completa:
class Lista {
constructor() {
this.almacen = [];
this.total = 0;
this.cursor = 0;
}
agregar(elemento) {
this.almacen[this.total] = elemento;
this.total++;
}
eliminar(elemento) {
const indice = this.buscar(elemento);
if (indice !== -1) {
this.almacen.splice(indice, 1);
this.total--;
return true;
}
return false;
}
buscar(elemento) {
return this.almacen.indexOf(elemento);
}
longitud() {
return this.total;
}
representar() {
return this.almacen.toString();
}
insertar(elemento, referencia) {
const pos = this.buscar(referencia);
if (pos !== -1) {
this.almacen.splice(pos + 1, 0, elemento);
this.total++;
return true;
}
return false;
}
vaciar() {
this.almacen = [];
this.total = 0;
this.cursor = 0;
}
contiene(elemento) {
return this.almacen.includes(elemento);
}
inicio() {
this.cursor = 0;
}
fin() {
this.cursor = this.total - 1;
}
retroceder() {
if (this.cursor > 0) this.cursor--;
}
avanzar() {
if (this.cursor < this.total - 1) this.cursor++;
}
posActual() {
return this.cursor;
}
irA(posicion) {
this.cursor = posicion;
}
obtenerActual() {
return this.almacen[this.cursor];
}
}
Mecanismo de Iteración
El iterador interno permite recorrer elementos sin exponer la estructura subyacente. Ventajas clave:
- Independencia del almacenamiento interno
- Actualizaicón automática al modificar la lista
- Interfaz unificada para diferentes implementaciones
Validación de Funcionamiento
const prueba = new Lista();
prueba.agregar("A");
prueba.agregar("B");
prueba.agregar("C");
prueba.inicio();
console.log(prueba.obtenerActual()); // "A"
prueba.avanzar();
console.log(prueba.obtenerActual()); // "B"
prueba.fin();
console.log(prueba.obtenerActual()); // "C"
// Recorrido inverso
for(prueba.fin(); prueba.posActual() >= 0; prueba.retroceder()) {
console.log(prueba.obtenerActual());
}