tpu/u_dcolpi.pas

{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION

  Doble cola por punteros. keywords: cola, punteros

FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $Id: u_dcolpi.pas 2002/04/25 15:57 mstorti Exp jdelia   $ }

unit u_dcolpi;

interface

type
    tipo_elemento = integer;
    ptipo_celda = ^tipo_celda;
    tipo_celda = record
      elemento : tipo_elemento;
      sig      : ptipo_celda
    end;

    dcolpi = object
    private
      ant, post: ptipo_celda;
      procedure ERROR (s:string);
    public
      procedure ANULA;
      procedure PONE_FRENTE (x: tipo_elemento);
      procedure QUITA_FRENTE;
      procedure PONE_FINAL (x: tipo_elemento);
      procedure QUITA_FINAL;
      function  VACIA  : boolean;
      function  FRENTE : tipo_elemento;
      function  FINAL  : tipo_elemento;
    end;

    implementation

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure dcolpi.ERROR (s: string);
begin
  write ('error: ');
  writeln (s);
  halt;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure dcolpi.ANULA;
begin
  new (ant);
  ant^.sig := nil;
  post := ant;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure dcolpi.PONE_FINAL (x:tipo_elemento);
begin
  new (post^.sig);
  post := post^.sig;
  post^.elemento := x;
  post^.sig := nil;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure dcolpi.QUITA_FINAL;
var
  q: ptipo_celda;
begin
  if ( VACIA ) then ERROR ('la cola esta vacia') ;
  q := ant;
  while (q^.sig <> post) do q := q^.sig;
  post := q;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure dcolpi.PONE_FRENTE (x: tipo_elemento);
var
  temp: ptipo_celda;
begin
  temp := ant;
  new (ant);
  ant^.sig := temp;
  ant^.sig^.elemento := x;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure dcolpi.QUITA_FRENTE;
begin
  if ( VACIA ) then ERROR ('la cola esta vacia') ;
  ant := ant^.sig ;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function dcolpi.VACIA : boolean;
begin
  VACIA := ( ant = post ) ;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function  dcolpi.FRENTE : tipo_elemento;
begin
  if ( VACIA ) then ERROR (' la cola esta vacia');
  FRENTE := ant^.sig^.elemento;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function  dcolpi.FINAL : tipo_elemento;
begin
  if ( VACIA ) then ERROR (' la cola esta vacia');
  FINAL := post^.elemento;
end ;

end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}

Generated by GNU enscript 1.6.1.