UgualeElementoMinoreElemento
procedure InitLista (var lis: TipoLista);
begin
lis := NIL
end;
function TestListaVuota (lis: TipoLista): boolean;
begin
TestListaVuota := (lis = NIL)
end;
procedure InserisciTestaLista (var lis: TipoLista; elem: TipoElemLista);
var
paux : TipoLista;
begin
new(paux);
paux^.info := elem;
paux^.next := lis;
lis := paux
end;
procedure TestaLista (lis: TipoLista; var elem: TipoElemLista);
begin
if lis <> NIL then
elem := lis^.info
end;
procedure RestoLista (var lis: TipoLista);
begin
if lis <> NIL then
lis := lis^.next
end;
procedure CancellaPrimoLista (var lis: TipoLista);
var
paux : TipoLista;
begin
if lis <> NIL then
begin
paux := lis;
lis := lis^.next;
dispose(paux)
end
end;
procedure InserisciCodaLista (var lis: TipoLista; elem: TipoElemLista);
var
ultimo,
paux : TipoLista;
begin
new(paux);
paux^.info := elem;
paux^.next := NIL;
if lis = NIL then
lis := paux
else
begin
ultimo := lis;
while ultimo^.next <> NIL do
ultimo := ultimo^.next;
ultimo^.next := paux
end
end;
procedure CopiaLista (lis: TipoLista; var copia: TipoLista);
var
testa : TipoElemLista;
begin
if TestListaVuota(lis) then
InitLista(copia)
else
begin
TestaLista(lis, testa);
RestoLista(lis);
CopiaLista(lis, copia);
InserisciTestaLista(copia, testa)
end
end;
procedure CancellaLista (var lis: TipoLista);
begin
if (not TestListaVuota(lis)) then
begin
CancellaPrimoLista(lis);
CancellaLista(lis)
end
end;
procedure InvertiLista (var lis: TipoLista);
var
prec,
suc : TipoLista;
begin
prec := NIL;
while lis <> NIL do
begin
suc := lis;
lis := lis^.next;
suc^.next := prec;
prec := suc
end;
lis:= prec
end;
function EsisteInLista (lis: TipoLista; elem: TipoElemLista): boolean;
var
trovato : boolean;
primo : TipoElemLista;
begin
trovato := FALSE;
while (not TestListaVuota(lis)) and (not trovato) do
begin
TestaLista(lis, primo);
if UgualeElemento(primo, elem) then
trovato := TRUE
else
RestoLista(lis)
end;
EsisteInLista := trovato
end;
procedure TrovaElementoLista (var lis: TipoLista; elem: TipoElemLista);
var
trovato : boolean;
primo : TipoElemLista;
begin
trovato := FALSE;
while (not TestListaVuota(lis)) and (not trovato) do
begin
TestaLista(lis, primo);
if UgualeElemento(primo, elem) then
trovato := TRUE
else
RestoLista(lis)
end
end;
procedure CancellaElementoLista (var lis: TipoLista; elem: TipoElemLista);
var
testa : TipoElemLista;
begin
if (not TestListaVuota(lis)) then
begin
TestaLista(lis, testa);
CancellaPrimoLista(lis);
if (not UgualeElemento(testa, elem)) then
begin
CancellaElementoLista(lis, elem);
InserisciTestaLista(lis, testa)
end
end
end;
procedure CancellaTuttiLista (var lis: TipoLista; elem: TipoElemLista);
begin
while EsisteInLista(lis, elem) do
CancellaElementoLista(lis, elem)
end;
procedure InserisciInListaOrdinata (var lis: TipoLista; elem: TipoElemLista);
var
testa : TipoElemLista;
begin
if TestListaVuota(lis) then
InserisciTestaLista(lis, elem)
else
begin
TestaLista(lis, testa);
if (not MinoreElemento(testa, elem)) then
InserisciTestaLista(lis, elem)
else
begin
CancellaPrimoLista(lis);
InserisciInListaOrdinata(lis, elem);
InserisciTestaLista(lis, testa)
end
end
end;
function EsisteInListaOrdinata (lis: TipoLista; elem: TipoElemLista): boolean;
var
trovato,
continua : boolean;
begin
trovato := FALSE;
continua := TRUE;
while (lis <> NIL) and continua do
if UgualeElemento(lis^.info, elem) then
begin
trovato := TRUE;
continua := FALSE
end
else if MinoreElemento(elem, lis^.info) then
continua := FALSE
else
lis := lis^.next;
EsisteInListaOrdinata := trovato
end;
procedure TrovaElementoListaOrdinata (var lis: TipoLista;
elem: TipoElemLista);
var
trovato : boolean;
begin
trovato := FALSE;
while (lis <> NIL) and (not trovato) do
if UgualeElemento(lis^.info, elem) then
trovato := TRUE
else if MinoreElemento(lis^.info, elem) then
lis := NIL
else
lis := lis^.next
end;
procedure CancellaElementoListaOrdinata (var lis: TipoLista;
elem: TipoElemLista);
var
prec,
paux : TipoLista;
continua : boolean;
begin
if lis <> NIL then
if UgualeElemento(lis^.info, elem) then
begin
paux := lis;
lis := lis^.next;
dispose(paux)
end
else
begin
prec := lis;
continua := TRUE;
while (prec^.next <> NIL) and continua do
if UgualeElemento(prec^.next^.info, elem) then
begin
paux := prec^.next;
prec^.next := paux^.next;
dispose(paux);
continua := FALSE
end
else if MinoreElemento(elem, prec^.next^.info) then
continua := FALSE
else
prec := prec^.next
end
end;