Febrero 01, 2004

Implementación de una lista enlazada

Pues vamos con una implementación de una lista enlazada simple. El código necesita ser optimizado (sobre todo porque el método deleteElement se apoya en otro que hace prácticamente lo mismo, y porque la lista se recorre por índices, y podría hacerse mejor simplemente mirando a los punteros). Pero sirve para empezar. De todas formas, según vaya oiptimizando el código, iré posteando las novedades.

¿Cómo funciona?. Pues para crear una instancia de la lista, se le pasa como parámetro una instancia de una clase llamada "comparador", que tiene definido un método lessThan() que es el que se encarga de decidir cómo se debe ordenar la lista. En este caso, la lista va a contener objetos, y la ordenación será por la propiedad "index" de esos objetos (ordenación ascendente, por cierto).

Por tanto, esa clase comparador quedaría más o menos así:

class net.designnation.structs.Comparador implements IOrder
{
 
 	function Comparador()
 	{
  	
  	}
 	
 	public function lessThan( firstComp: Object, secondComp: Object): Boolean
 	{
  		if (firstComp.index< secondComp.index)
  		{
   			return true;
   		}
  		else
  		{
   			return false;
   		}
  	}
}

Entonces, para crear la lista haríamos:

import net.designnation.structs.*;

var myList:List = new List(new Comparador());

Y para manipularla:

myList.push({index:6, prop:"propvalue6"});
myList.insert({index:3, prop:"propvalue3"});

trace("Lista " + myList);

myList.insert({index:0, prop:"propvalue0"});
trace("Lista " + myList);

myList.insert({index:2, prop:"propvalue2"});
trace("Lista " + myList);

myList.insert({index:1, prop:"propvalue1"});
trace("Lista " + myList);

myList.insert({index:4, prop:"propvalue4"});
trace("Lista " + myList);

myList.insert({index:5, prop:"propvalue5"});
trace("Lista " + myList);

myList.insert({index:7, prop:"propvalue7"});
trace("Lista " + myList);

myList.insert({index:6, uno:"propvalue6"});
trace("Lista " + myList);

Si te resulta de interés, puedes descargarte el código aquí

Escrito por Cesar Tardaguila en: Febrero 1, 2004 01:29 PM | TrackBack
Comentarios

Una pregunta: qué usas para pintar el código en MT? CodeBeautifier, o lo haces "a mano"?

Gracias

Posted by: victor en: Marzo 16, 2004 07:47 AM

No, a mano no, utilizo CodeBeautifier.

Posted by: Cesar Tardaguila en: Marzo 16, 2004 09:58 AM

Como le hago para ordenar una lista enlazada alfabeticamente con seleccion e insercion directa?

Gracias.

Posted by: Luis en: Junio 7, 2004 11:04 AM

Saludos, Luis, y perdona por tardar tanto en responderte, pero estoy bastante liado.

Puedes pasar al constructor de la lista una instancia de una clase que implemente el interfaz IOrder, por tanto, que contenga la implementación de dos métodos, uno llamado lessThan, y el otro equals.

Esos métodos son los que tienes que implementar, y son los que se utilizan en el método insertOrdered de la lista enlazada.

Si necesitas más ayuda, no dudes en pedirla.

Posted by: Cesar Tardaguila en: Junio 8, 2004 06:20 PM