intercala1.pas
{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
Escriba un procedimiento para intercalar dos listas
ordenadas L1 y L2 en una nueva lista L tambi\'en ordenada.
Esta versi\'on se copia todo L1 en L3 y despu\'es se usa
INSERTA_ORD para poner los elementos de L2 en los lugares
correctos de L (ver tambi\'en ``intercala2.pas'').
keywords: lista
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: intercala1.pas 2003/03/12 16:30 mstorti Exp jdelia$ }
program p_intercala1 ;
uses u_listpi;
type
lista = listpi ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure COPIA (L1: lista ; var L2: lista);
var
p : posicion;
e : tipo_elemento ;
begin
L2.ANULA ;
p := L1.PRIMERO ;
while ( p <> L1.FIN ) do begin
e := L1.RECUPERA (p);
L2.INSERTA (e, L2.FIN) ;
p := L1.SIGUIENTE (p)
end ; {while}
L2.IMPRIME ('lista copia');
readln
end ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure INSERTA_ORD (e: tipo_elemento; var L: lista);
var
p : posicion;
begin
p := L.PRIMERO ;
while (p <> L.FIN) and (L.RECUPERA(p) <= e) do begin
p := L.SIGUIENTE (p)
end ; {while}
L.INSERTA (e, p)
end ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure INTERCALA1 (L1, L2: lista ; var L3: lista);
var
p : posicion;
e : tipo_elemento ;
begin
COPIA (L1,L3) ;
p := L2.PRIMERO ;
while ( p <> L2.FIN ) do begin
e := L2.RECUPERA (p);
INSERTA_ORD (e, L3) ;
p := L2.SIGUIENTE (p);
L3.IMPRIME ('lista intercalada actual L');
end {while}
end ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
L1, L2, L3 : lista;
p1, p2 : posicion;
begin
L1.ANULA ;
p1 := L1.PRIMERO ;
L1.INSERTA (5, p1);
L1.INSERTA (3, p1);
L1.INSERTA (1, p1);
L1.IMPRIME ('lista L1');
L2.ANULA ;
p2 := L2.PRIMERO ;
L2.INSERTA (6, p2);
L2.INSERTA (4, p2);
L2.INSERTA (2, p2);
L2.IMPRIME ('lista L2');
INTERCALA1 (L1, L2, L3);
L3.IMPRIME ('lista intercalada L3')
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.