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);
begin
if lis = NIL then
begin
new(lis);
lis^.info := elem;
lis^.next := NIL
end
else
InserisciCodaLista(lis^.next, elem)
end;
procedure CopiaLista (lis: TipoLista; var copia: TipoLista);
begin
if lis = NIL then
copia := NIL
else
begin
new(copia);
copia^.info := lis^.info;
CopiaLista(lis^.next, copia^.next)
end
end;
procedure CancellaLista (var lis: TipoLista);
begin
if lis <> NIL then
begin
CancellaLista(lis^.next);
dispose(lis);
lis := NIL
end
end;
procedure InvertiLista (var lis: TipoLista);
var
paux : TipoLista;
begin
if lis <> NIL then
if lis^.next <> NIL then
begin
paux := lis;
lis := lis^.next;
InvertiLista(lis);
paux^.next^.next := paux;
paux^.next := NIL
end
end;
function EsisteInLista (lis: TipoLista; elem: TipoElemLista): boolean;
var
trovato : boolean;
begin
if lis = NIL then
EsisteInLista := FALSE
else if UgualeElemento(lis^.info, elem) then
EsisteInLista := TRUE
else
EsisteInLista := EsisteInLista(lis^.next, elem)
end;
procedure TrovaElementoLista (var lis: TipoLista; elem: TipoElemLista);
var
trovato : boolean;
begin
if lis <> NIL then
if (not UgualeElemento(lis^.info, elem)) then
begin
lis := lis^.next;
TrovaElementoLista(lis, elem)
end
end;
procedure CancellaElementoLista (var lis: TipoLista; elem: TipoElemLista);
var
paux : TipoLista;
begin
if lis <> NIL then
if UgualeElemento(lis^.info, elem) then
begin
paux := lis;
lis := lis^.next;
dispose(paux)
end
else
CancellaElementoLista(lis^.next, elem)
end;
procedure CancellaTuttiLista (var lis: TipoLista; elem: TipoElemLista);
var
paux : TipoLista;
begin
if lis <> NIL then
if UgualeElemento(lis^.info, elem) then
begin
paux := lis;
lis := lis^.next;
dispose(paux);
CancellaTuttiLista(lis, elem)
end
else
CancellaTuttiLista(lis^.next, elem)
end;
procedure InserisciInListaOrdinata (var lis: TipoLista; elem: TipoElemLista);
var
paux : TipoLista;
begin
if lis = NIL then
begin
new(paux);
paux^.info := elem;
paux^.next := NIL;
lis := paux
end
else if (not MinoreElemento(lis^.info, elem)) then
begin
new(paux);
paux^.info := elem;
paux^.next := lis;
lis := paux
end
else
InserisciInListaOrdinata(lis^.next, elem)
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;