Pascal/Turbo Pascal - como ordenar una lista simple

 
Vista:

como ordenar una lista simple

Publicado por Raymond Calderon G (20 intervenciones) el 27/07/2002 14:33:20
Alguien puede decirme como ordenar una lista por favor...

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:como ordenar una lista simple

Publicado por Roberto Garcia (128 intervenciones) el 28/07/2002 07:04:59
Yo uso el metodo de la burbuja guardando los campos del que esta enfrente en un auxiliar y los cambio todos menos el campos de enlace.

repeat
ordenado:=true;
aux:=inicio;

while (aux^.siguiente <>nil) do begin

if aux^.nombre > aux^.siguiente^.nombre then begin
reg:=aux^;
aux^.nombre:=aux ^.siguiente^nombre;
aux^.apellido:=aux^.siguiente.apellido;

aux^ .siguiente^.nombre:=reg.nombre;
aux^.siguiente^.apellido:=reg.apellido;
ordenado:=false;
end;
until ordenado;

inicio -- es la raiz de la lista
aux -- es el que se sirve para moverse por la lista para no perder
los nodos
reg -- es del mismo tipo que cada nodo

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

RE:como ordenar una lista simple

Publicado por raymond Calderon (20 intervenciones) el 29/07/2002 08:49:14
lo hice como me dijiste pero me da error al cierre del ciclo repeat
(estament error) algo asi..
aqui esta como lo hice dime si esta algo mal...

inic:=lista;
ordenado:=false;
repeat
ordenado:=true;
aux:=inic;
while (aux^.sig <>nil) do
begin
if aux^.nombre > aux^.sig^.nombre then begin
infor.nombre:=aux^.nombre;
aux^.nombre:=aux ^.sig^.nombre;
aux^.tel:=aux^.sig^.tel;
aux^ .sig^.nombre:=infor.nombre;
aux^.sig^.tel:=infor.tel;
ordenado:=false;
end;
until ordenado;

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

RE:como ordenar una lista simple

Publicado por Roberto Garcia (128 intervenciones) el 30/07/2002 05:51:32
De primera vista te falta el end del while o del if, como lo quieras ver, el caso es que falta un end.

infor me imagino que es del tipo registro con el cual declaraste el puntero, entonces el codigo deberia quedar asi:

inic:=lista;
ordenado:=false;
repeat
ordenado:=true;
aux:=inic;
while (aux^.sig <>nil) do
begin
if aux^.nombre > aux^.sig^.nombre then begin
infor=aux^;
aux^.nombre:=aux ^.sig^.nombre;
aux^.tel:=aux^.sig^.tel;
aux^ .sig^.nombre:=infor.nombre;
aux^.sig^.tel:=infor.tel;
ordenado:=false;
end;
end;
until ordenado;

Suerte

Roberto
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