En lugar de escribir sobre «puros» algoritmos esta vez he decidido escribir sobre estructuras de datos y comenzar con una aplicación de pilas en javascript. Sin embargo los algoritmos y estructuras de datos han convivido desde el comienzo de la informática. Otra razón para escribir sobre las estructuras de datos es que muchos algoritmos necesitan una estructura de datos en concreto para ser implementados. La mayoría de algoritmos de búsqueda dependen de las estructuras de datos. De tal manera que la búsqueda en un árbol es diferente a buscar en una lista enlazada.
Me gustaría escribir más sobre la búsqueda en mis futuros posts de algoritmos, pero primero necesitamos unos ejemplos de estructuras de datos. La primera es, como he mencionado una pila.
Implementarlo en javascript es realmente un ejemplo sencillo, que no necesita mucho para ser entendido. Pero ¿Qué es una pila?
Puedes pensar que la pila es una cosa de la informática, como una pila de hojas de papel, tal como se observa en la imagen. Dispones de tres operaciones básicas. Puedes agregar nuevos elementos a la pila al colocarlo en la parte superior de la pila, por lo que la parte superior de la pila ser convierte en el segundo elemento de la pila. Otra operación es la de retirar de la pila – eliminar el «primer» elemento de la pila – el elemento más arriba de la pila y entregarlo. Y finalmente imprimir la pila. Esto es difícil definir como operación, pero vamos a decir que haz de mostrar de alguna manera todos los elementos de la pila.
Aquí un pequeño esquema:
Código fuente:
Algo de código fuente:
var node = function() { var data; var next = null; } var stack = function() { this.top = null; this.push = function(data) { if (this.top == null) { this.top = new node(); this.top.data = data; } else { var temp = new node(); temp.data = data; temp.next = this.top; this.top = temp; } } this.pop = function() { var temp = this.top; var data = this.top.data; this.top = this.top.next; temp = null; return data; } this.print = function() { var node = this.top; while (node != null) { console.log(node.data); node = node.next; } } } var s = new stack(); s.push(1); s.push(2); s.push(3); s.print(); var a = s.pop(); s.print();