Pascal/Turbo Pascal - Ordenar sublistas

 
Vista:

Ordenar sublistas

Publicado por Dani (1 intervención) el 18/08/2010 19:20:18
Necesito su ayuda xk me voy a volver loco. Es algo sencillo pero que no sé donde fallo.

Quiero ordenar la sub-lista por orden alfabetico segun el nombre de la tienda,donde fallo?


program prueba;

uses crt;

TYPE

punt_tienda_precio =^nodo_tienda_precio; {Nodo de la SUBLISTA}
nodo_tienda_precio=RECORD
tienda : string;
precio : string;
sig : punt_tienda_precio;
end;

punt_produc = ^nodo_produc;{Nodo de la LISTA}
nodo_produc = RECORD
nombre : string;
datos : punt_tienda_precio;
sig : punt_produc
end;



PROCEDURE Ordena_sub(cab_produc : punt_produc);
VAR
p_dato : punt_tienda_precio;
p_info : punt_produc;
aux, ant, pos : punt_tienda_precio;
cambio, x : INTEGER;


BEGIN

IF cab_produc<>nil THEN
BEGIN
p_info:=cab_produc; {Puntero auxiliar a la cabecera de LISTA}
WHILE p_info<>nil DO
BEGIN

p_dato:=p_info^.datos; {Enlazar un nodo de LISTA con
el nodo cabecera de su SUBLISTA}
new(ant);
ant^.sig:=p_dato;
pos:=NIL;
aux:=p_dato;
x:=0; {inicializamos valores}

IF (aux <> NIL) AND (aux^.sig <> NIL) THEN
{Si sublista no tiene nodos o solo tiene uno no hay que hacer nada}
BEGIN
REPEAT
aux:=p_dato;
x:=0;
{Cada vuelta del bucle REPEAT estas variables deben inicializarse }

WHILE aux^.sig <> NIL DO {Mientras que aux no llegue al ultimo nodo}
BEGIN
cambio:=0; {No se han intercambiado nodos, por tanto, cambio = 0 }

IF Upcase(aux^.tienda) > Upcase( aux^.sig^.tienda) THEN
BEGIN

{En cuanto el nodo superior tenga un caracter mayor que el inferior se
intercambia los nodos, la sentencia despues del OR se implementa para
los casos por ejemplo que titulo = a y titulo.sig = aa }

pos:=aux^.sig;
aux^.sig:=aux^.sig^.sig;
pos^.sig:=aux;
IF aux = p_dato THEN p_dato:=pos
ELSE ant^.sig:=pos;

INC(cambio);
INC(x);
{Se produjo un intercambio por tanto incrementamos}
BREAK;
END;


IF cambio <> 0 THEN ant:=pos
ELSE
BEGIN ant:=aux; aux:=aux^.sig;
END;
END; {WHILE}
{Continuamos hasta que lleguemos al final de lista }

UNTIL
x = 0
{Continuamos hasta que nose haya tenido que intercambiar ningun nodo en la lista}
END; {IF 1}

p_info:=p_info^.sig; {Avanzar puntero en LISTA}
END;
end;
end;
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