tpu/u_listpi.pas
{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
Listas de enteros por punteros. keywords: lista, punteros
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $Id: u_listpi.pas,v 1.1 2002/04/25 15:57:09 mstorti Exp mstorti $}
unit u_listpi;
interface
type
tipo_elemento = integer;
ptipo_celda = ^tipo_celda;
tipo_celda = record
elemento: tipo_elemento;
sig : ptipo_celda
end;
posicion = ptipo_celda;
listpi = object
private
cab : posicion;
procedure ERROR (s: string);
public
procedure INSERTA (x: tipo_elemento; p: posicion);
function LOCALIZA (x: tipo_elemento): posicion;
function RECUPERA (p: posicion) : tipo_elemento;
procedure SUPRIME (p: posicion) ;
function SIGUIENTE (p: posicion) : posicion;
function ANTERIOR (p: posicion) : posicion;
function ANULA : posicion;
function PRIMERO : posicion;
function FIN : posicion;
procedure IMPRIME (s : string) ;
end ;
implementation
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure listpi.ERROR (s: string);
begin
write ('error: ');
writeln (s);
halt;
end; {ERROR}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure listpi.INSERTA (x: tipo_elemento; p: posicion);
var
temp : posicion;
begin
temp := p^.sig;
new (p^.sig);
p^.sig^.elemento := x;
p^.sig^.sig := temp;
end; {INSERTA}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function listpi.LOCALIZA (x: tipo_elemento): posicion;
var
q: posicion;
begin
q := PRIMERO;
while (q^.sig <> nil)
and (q^.sig^.elemento <> x) do q := q^.sig;
LOCALIZA := q;
end; {LOCALIZA}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function listpi.RECUPERA (p: posicion): tipo_elemento;
begin
RECUPERA := p^.sig^.elemento;
end; {RECUPERA}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure listpi.SUPRIME (p: posicion);
begin
p^.sig := p^.sig^.sig;
end; {SUPRIME}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function listpi.SIGUIENTE (p: posicion): posicion;
begin
SIGUIENTE := p^.sig;
end; {SIGUIENTE}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function listpi.ANTERIOR (p: posicion): posicion;
var
q,r : posicion;
begin
r := PRIMERO ;
q := PRIMERO ;
while (q <> p) and (q^.sig <> nil) do begin
r := q;
q := q^.sig;
end;
ANTERIOR := r;
end; {ANTERIOR}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function listpi.ANULA : posicion;
begin
new (cab);
cab^.sig := nil;
ANULA := cab;
end; {ANULA}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function listpi.PRIMERO : posicion;
begin
PRIMERO := cab;
end; {PRIMERO}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function listpi.FIN : posicion;
var
q: posicion;
begin
q := PRIMERO;
while (q^.sig <> nil) do q := q^.sig;
FIN := q;
end; {FIN}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure listpi.IMPRIME (s: string) ;
var
q, z : ptipo_celda;
begin
if length (s) > 0 then writeln (s);
write ('lista: ');
q := PRIMERO ;
z := FIN ;
while (q <> z) do begin
write (RECUPERA (q), ' ');
q := SIGUIENTE (q);
end ; {while}
writeln ;
end; {IMPRIME}
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.