UTNianos

Versión completa: [Algoritmos] Ordenar una lista enlazada
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Me resistia a postear, pero no pude entender bien el tema éste. Alguno me podría explicar con paciencia XD como ordenar una lista enlazada? Me dicen que se hace con burbuja pero tengo problemas para aplicarlo en listas.
podes insertar ordenado, y te ahorras el trabajo de ordenar despues

http://holamundopascal.blogspot.com/2007...l#oplistas
En el blog de Pablo esta muy bien explicado. Pero si aún tenés dudas, esperame a mañana o pasado que te explico o en su defecto te scanneo el diagrama que yo suelo usar. Hace todo en uno, sin necesidad de hacer grandes separaciones XD
(04-07-2011 23:49)el pibe escribió: [ -> ]podes insertar ordenado, y te ahorras el trabajo de ordenar despues

http://holamundopascal.blogspot.com/2007...l#oplistas

El tema es que para el TP me piden mostrar la lista ordenada de 2 formas distintas. Asi que si la inserto ordenada al principio, la voy a tener que reordenar despues, ese es el problema que tengo. Tambien me dijeron que otra opcion es ir eliminandola, liberando la memoria e insertandola ordenada en una lista nueva, pero tambien se me complicó para hacer eso.

Cita:En el blog de Pablo esta muy bien explicado. Pero si aún tenés dudas, esperame a mañana o pasado que te explico o en su defecto te scanneo el diagrama que yo suelo usar. Hace todo en uno, sin necesidad de hacer grandes separaciones XD

gracias dou! si podes buenisimo porque en el blog de pablo no encontre nada para ordenar...
(05-07-2011 08:19)sentey escribió: [ -> ]
(04-07-2011 23:49)el pibe escribió: [ -> ]podes insertar ordenado, y te ahorras el trabajo de ordenar despues

http://holamundopascal.blogspot.com/2007...l#oplistas

El tema es que para el TP me piden mostrar la lista ordenada de 2 formas distintas. Asi que si la inserto ordenada al principio, la voy a tener que reordenar despues, ese es el problema que tengo. Tambien me dijeron que otra opcion es ir eliminandola, liberando la memoria e insertandola ordenada en una lista nueva, pero tambien se me complicó para hacer eso.

podes solucionar eso barriendo una sola vez la lista1.

haces otra lista, lista2
y vas pasando los nodos de lista1 a lista2, insertando ordenado =P
(05-07-2011 08:48)el pibe escribió: [ -> ]
(05-07-2011 08:19)sentey escribió: [ -> ]
(04-07-2011 23:49)el pibe escribió: [ -> ]podes insertar ordenado, y te ahorras el trabajo de ordenar despues

http://holamundopascal.blogspot.com/2007...l#oplistas

El tema es que para el TP me piden mostrar la lista ordenada de 2 formas distintas. Asi que si la inserto ordenada al principio, la voy a tener que reordenar despues, ese es el problema que tengo. Tambien me dijeron que otra opcion es ir eliminandola, liberando la memoria e insertandola ordenada en una lista nueva, pero tambien se me complicó para hacer eso.

podes solucionar eso barriendo una sola vez la lista1.

haces otra lista, lista2
y vas pasando los nodos de lista1 a lista2, insertando ordenado =P

Hice eso, pero la 2da vez que queria mostrar la lista le faltaba un pedazo, y asi sucesivamente, hasta quedar vacia. Termine diciendole a la profe y me dijo que arme 2 listas, una ordenada por cada cosa. Cierren si quieren =)
para ordenar insertas ordenado
y despues, si le tenes que cambiar el orden, simplemente la pasas a otra lista
es decir, aplicas el mismo algoritmo de orden, pero los elementos los obtenes de una lista, y los transferis a una nueva. Recorda guardar el puntero del siguiente antes de moverte a la nueva lista, no sea cosa que la pierdas =P
(05-07-2011 08:19)sentey escribió: [ -> ]Tambien me dijeron que otra opcion es ir eliminandola, liberando la memoria e insertandola ordenada en una lista nueva, pero tambien se me complicó para hacer eso.
Sé que ya lo hiciste, pero para el final te limitan la cantidad de nodos y a veces no podés permitirte tener dos listas.
Eliminando nodos: (Para esta no necesitas ninguna funcion adicional, lo cuál es bueno dada la limitación del tiempo)


while(lista<>NIL) do begin
info := eliminarPrimerNodo(lista);
insertarOrdenado(listaOrdenada,info);
end;
lista := listaOrdenada;




Reinsertando:


while(lista<>NIL) do begin
nodo := quitarPrimerNodoYHacerQueListaApunteAlSiguiente(lista);
insertarNodoOrdenado(listaOrdenada,nodo);
end;
lista := listaOrdenada;


function QuitarPrimerNodo...(var lista:tNodo):tNodo
var nodo:tNodo;
begin
nodo := lista;
lista := nodo^.sig;
nodo^.sig := NIL;
QuitarPrimerNodo... := nodo;

El otro igual que insetarOrdenado pero sin las líneas del principio
"new(nuevo);
nuevo^.info:=valor;"
Porque ya te envían nodo nuevo con la info cargada.





URLs de referencia