intercala2.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 mantienen dos punteros sobre
cada una de las listas y se va copiando siempre el
elemento menor y actualizando el puntero correspondiente
(ver tambi\'en ``intercala1.pas'').
keywords: lista
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: intercala2.pas 2003/03/12 16:30 mstorti Exp jdelia$ }
program p_intercala2 ;
uses u_listpi;
type
lista = listpi ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure INTERCALA2 (L1, L2: lista ; var L: lista);
var
p1, p2 : posicion;
e1, e2 : tipo_elemento ;
begin
L.ANULA ;
p1 := L1.PRIMERO ;
p2 := L2.PRIMERO ;
while ( p1 <> L1.FIN ) and ( p2 <> L2.FIN ) do begin
e1 := L1.RECUPERA (p1);
e2 := L2.RECUPERA (p2);
writeln (e1, ' ', e2);
if ( e1 <= e2) then
begin
L.INSERTA (e1, L.FIN);
p1 := L1.SIGUIENTE (p1);
end
else begin
L.INSERTA (e2, L.FIN);
p2 := L2.SIGUIENTE (p2);
end; {if}
end ; {while}
L.IMPRIME ('primera parte de la lista intercalada L');
readln ;
{ Copia los restos de cada una }
while ( p1 <> L1.FIN ) do begin
e1 := L1.RECUPERA (p1);
L.INSERTA (e1, L.FIN);
p1 := L1.SIGUIENTE (p1);
end ; {while}
while ( p2 <> L2.FIN ) do begin
e2 := L2.RECUPERA (p2);
L.INSERTA (e2, L.FIN);
p2 := L2.SIGUIENTE (p2);
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');
INTERCALA2 (L1, L2, L3);
L3.IMPRIME ('lista intercalada L3');
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.