Se così può essere più chiaro:
codice:
{Il programma accetta in ingresso dei valori interi e li ordina direttamente in
ordine crescente(con insertion sort).L'immissione termina con il valore zero.
La lista creata viene visualizzata.}
program lista_ordin;
{$APPTYPE CONSOLE}
uses SysUtils;
type
puntatore= ^elemento;
//Struttura degli elemnti della lista
elemento=record
inf:integer;
pun:puntatore;
end;
//Funzione per la creazione della lista ord.Restituisce il puntatore alla testa
Function crea_lista_ordin: puntatore;
var
p,q: puntatore;
paus: puntatore; //puntatore ausiliario
x: integer; //contiene il valore da inserire
begin
p:=NIL; //Inizializzazione lista vuota
writeln;
write('Inserire primo elemento della lista(0 per terminare): ');
readln(x);
//Creazione del primo elemento della lista:quello in testa
if x<>0 then begin
new(p);
p^.inf:=x;
p^.pun:=NIL;
write('Inserire un altro elemento nella lista(0 per terminare): ');
readln(x);
end;
//Ciclo per la creazione degli elementi successivi
while x<>0 do begin
//Creazione nuovo spazio di memoria
new(paus);
paus^.inf:=x;
//Inserimento nella lista
if x<p^.inf then begin //Se il valore immesso è minore di quello che c'era
paus^.pun:=p; //in testa allora, il puntatore alla testa viene
paus:=p; //aggiornato (paus^.pun:=p) in maniera tale che paus
end //punti adesso pure alla testa (p:=paus)
else begin
//Ricerca del punto di inserimento
q:=p;
while ((q^.pun)<>NIL) AND ((q^.pun)^.inf<x) do
q:=q^.pun;
//Inserimento elemento interno nella lista
paus^.pun:=q^.pun;
q^.pun:=paus;
end;
//Lettura nuovo elemento
write('Inserire altro elemento nella lista(0 per terminare): ');
readln(x);
end;
crea_lista_ordin:=p;
end;
(*Procedura iterativa per la visualizzazione della lista*)
Procedure visualizza_lista(p:puntatore);
begin
writeln;
write('punt_lista--> ');
(*Ciclo di scansione della lista*)
while p<>NIL do begin
write(p^.inf); //visualizza il campo informazione
write('---> ');
p:=p^.pun; //scorri di un elemento in avanti
end;
write ('NIL');
end;
(*Main*)
var
punt_lista:puntatore; //ci servirà da parametro attuale
begin
punt_lista:=crea_lista_ordin; //Chiam. dellq funz.per creare la lista
visualizza_lista(punt_lista); //Chiam. della proc. per visualiz. la lista
readln;
end.