Pascal/Turbo Pascal - Ordenar lista enlazada

 
Vista:

Ordenar lista enlazada

Publicado por Pascual (94 intervenciones) el 08/11/2006 23:37:14
Hola me estoy haciendo un lio tremendo para orenar una lista enlazada, me parece increible que me pasen estas cosas a estas alturas pero bueno ...
Os pongo mi problema, el caso es que he de ordenar una lista enlazada de enteros que está inicialmente desordenada intercambiando el orden de los punteros. He hecho esto, me funciona para una lista de os elementos (si, ya se que es muy triste). ¿Cómo haríais vosotros para ordenar una lista de más elementos?. Muchas gracias.

La declaración de tipos de mi lista:

TYPE
tElem = integer
PtrNodo = ^tNodo;
tNodo = RECORD
info: tElem;
sig: PtrNodo
END;

Mi programa:

PROGRAM ordena;
USES Crt, listas;
VAR
lista: PtrNodo;

PROCEDURE Ordenar (VAR p: PtrNodo);
VAR
aux: PtrNodo;
BEGIN
ListaVacia(aux);
aux := p;
REPEAT
BEGIN
IF p^.info > aux^.info THEN
BEGIN
p^.sig := aux^.sig;
aux^.sig := p;
p := aux;
END;
aux := aux^.sig;
END
UNTIL aux = nil;
END;

BEGIN
ClrScr;
ListaVacia(lista);
Inserfin(2,lista);
Inserfin(1,lista);
Write ('La lista inicial es: ');
VisualizaLista(lista);
Writeln;
Write ('La lista ordenada es: ');
Ordenar(lista);
VisualizaLista(lista);
Readln;
END.

Cuando hay más elementos no se como implementarlo, he hecho mil dibujos y nada, creo que me estoy volviendo loco, necesito vuestra ayuda. Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ordenar lista enlazada

Publicado por Diego Romero (996 intervenciones) el 09/11/2006 18:42:02
Hombre, le estás pasando como parámetro al procedimiento Ordenar() solo el puntero al primer elemento de la lista y dentro de él solo estás comparando este con el siguiente (y el procedimiento no es recursivo ni necesita serlo).
La lista que usas es simplemente enlazada, hay que pensar un poco, déjame intentarlo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar