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.
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


0