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.