PROGRAM Lista_cursori; uses wincrt; CONST maxlung=100; {costante intera positiva} TYPE lista = 0..maxlung; posizione= 0..maxlung; tipoelem=integer; componente=RECORD elemento : tipoelem; successivo : posizione; END; VAR listalibera: lista; SPAZIO: ARRAY[1..maxlung] OF componente; PROCEDURE INIZIALIZZA_LISTALIBERA; VAR i: integer; BEGIN listalibera:=1; FOR i:=1 TO maxlung-1 DO SPAZIO[i].successivo:=i+1; SPAZIO[maxlung].successivo:=0; END; PROCEDURE SPOSTA (VAR h,k: posizione); VAR temp: integer; BEGIN temp:= k; k:=h; h:=SPAZIO[k].successivo; SPAZIO[k].successivo:=temp; END; PROCEDURE INSLISTA(a: tipoelem; p: posizione; VAR L:lista); BEGIN if listalibera=0 then WRITE('errore') {pieno} else IF p=L then BEGIN SPOSTA(posizione(listalibera),posizione(L)); SPAZIO[L].elemento:=a END else BEGIN SPOSTA(posizione(listalibera), SPAZIO[p].successivo); SPAZIO[SPAZIO[p].successivo].elemento:=a END; END; PROCEDURE CANCLISTA(p: posizione; VAR L:lista); BEGIN IF p=0 then SPOSTA(posizione(L),posizione(listalibera)) else SPOSTA(SPAZIO[p].successivo,posizione(listalibera)) END; VAR lista1,lista2: lista; elemento:tipoelem; posizione_corrente: posizione; BEGIN INIZIALIZZA_LISTALIBERA; writeln('Inserisci gli elementi della lista 1 in ordine inverso (-1 per terminare):'); repeat readln(elemento); if (elemento<>-1) then inslista(elemento, posizione(lista1), lista1); until (elemento=-1); writeln('Inserisci gli elementi della lista 2 in ordine inverso (-1 per terminare):'); repeat readln(elemento); if (elemento<>-1) then inslista(elemento, posizione(lista2), lista2); until (elemento=-1); {Visualizzazione elementi delle liste} writeln('ELEMENTI DELLA LISTA 1:'); posizione_corrente:=posizione(lista1); while not (posizione_corrente=0) do begin write(spazio[posizione_corrente].elemento:5); posizione_corrente:=spazio[posizione_corrente].successivo end; writeln; writeln('ELEMENTI DELLA LISTA 2:'); posizione_corrente:=posizione(lista2); while not (posizione_corrente=0) do begin write(spazio[posizione_corrente].elemento:5); posizione_corrente:=spazio[posizione_corrente].successivo end; writeln; writeln; writeln('Cancellazione del primo elemento della lista 2.'); CANCLISTA(0,lista2); writeln; {Visualizzazione elementi delle liste} writeln('ELEMENTI DELLA LISTA 1:'); posizione_corrente:=posizione(lista1); while not (posizione_corrente=0) do begin write(spazio[posizione_corrente].elemento:5); posizione_corrente:=spazio[posizione_corrente].successivo end; writeln; writeln('ELEMENTI DELLA LISTA 2:'); posizione_corrente:=posizione(lista2); while not (posizione_corrente=0) do begin write(spazio[posizione_corrente].elemento:5); posizione_corrente:=spazio[posizione_corrente].successivo end; END.