{ Terreno Antonio mat.9714216 }
unit
listeit;
interface
type
tipo_elemento=integer;
tipo_lista=^cella;
cella= record
element:tipo_elemento;
next:tipo_lista
end;
procedure inserisci_in_coda_it( x : tipo_elemento; var L : tipo_lista);
function cerca_elemento_it(x : tipo_elemento; L : tipo_lista ) : boolean;
procedure cancella_elemento_it( x : tipo_elemento ; var L : tipo_lista);
procedure appendi_it (var L: tipo_lista; M: tipo_lista);
function prefix_it(L,M: tipo_lista) : boolean;
procedure Stampa_it(l : tipo_lista);
implementation
procedure inserisci_in_coda_it( x : tipo_elemento; var L : tipo_lista);
{ inserisce in coda ad L x }
var
prec, p, tmp : tipo_lista;
begin
p := l;
while (p <> nil) do
begin
prec := p;
p := p^.next
end;
new(tmp);
tmp^.element := x;
tmp^.next := nil;
prec^.next := tmp;
end;
function cerca_elemento_it(x : tipo_elemento; L : tipo_lista ) : boolean;
{ true se x e' in L }
var
trovato : boolean;
begin
trovato := false;
while (L <> nil) and (not trovato) do
begin
trovato := (L^.element = x);
L := L^.next
end;
cerca_elemento_it:= trovato
end;
procedure cancella_elemento_it( x : tipo_elemento ; var L : tipo_lista);
{ cancella la prima occorenza di x da L }
var
prec, p, tmp :tipo_lista;
begin
p := L;
while (p <> nil) and (p^.element <> x) do
begin
prec := p ;
p := p^.next
end;
if (p <> nil) then
begin
prec^.next := p^.next;
p := prec^.next
end
end;
procedure inserisci_in_testa(x:tipo_elemento;var L:tipo_lista);
{ inserisce in testa ad L x }
var
M:tipo_lista;
begin
new(M);
M^.element:=x;
M^.next:=L;
L:=M;
end;
procedure inverti_lista_it(var L : tipo_lista ) ;
{ inverte la lista }
var
M : tipo_lista;
begin
M := nil;
while (L<>nil) do
begin
inserisci_in_testa(L^.element,M);
L:=L^.next
end;
L:=M;
end;
function prefix_it(L,M: tipo_lista) : boolean;
{ true se L e' un prefisso di M }
var
uguali : boolean;
begin
uguali := true;
while ((L<>nil) and (M<>nil) and (uguali)) do
begin
uguali := (L^.element = M^.element);
L := L^.next;
M := M^.next;
end;
prefix_it := (uguali and (L = nil))
end;
procedure appendi_it(var L: tipo_lista; M: tipo_lista);
{ "aggancia a L la lista M }
var
prec, p : tipo_lista;
begin
if (L = nil) then
L := M
else
begin
p := L;
while (p <> nil) do
begin
prec := p;
p := p^.next
end;
prec^.next := M;
p := prec^.next
end
end;
procedure Stampa_it(l : tipo_lista);
{ stampa a video la lista l }
begin
while (l<>nil) do
begin
write(l^.element,' ');
l:=l^.next
end
end;
end.