Sequenza Selezione Iterazione Funzioni Ricorsione Operat. su interi Stringhe Vettori Array
Tabelle File Liste Alberi Esami Maturità Preparazione esami Database Macchina di Turing Automi
Algebra Geometria Giochi            

Esercizi sulle Liste

 

1

Scrivere una procedura che, data una lista, restituisca la stessa lista rovesciata.

2

Scrivere una procedura che, data una lista, restituisca l'ultimo elemento di tale lista.

3

Scrivere una procedura che, data una lista, restituisca il penultimo elemento di tale lista.

4

Scrivere una procedura che, data una lista, restituisca la stessa lista senza l'ultimo elemento.

5

Scrivere una procedura che, data una lista, restituisca l'i-esimo elemento della lista stessa.

6

Scrivere una procedura che, data una lista, restituisca la sottolista lunga N della lista data a partire dall'i-esimo elemento.

7

Scrivere una procedura che, data una lista e un elemento X, restituisca la posizione occupata da tale elemento. Restituire 0 se l'elemento non compare e la posizione minima se compare più volte.

8

Scrivere una procedura che, data una lista di reali, restituisca la somma dei valori della lista.

9

Scrivere una procedura che, data una lista di interi, restituisca la lista degli elementi pari e la lista degli elementi dispari.

10

Scrivere una procedura che, date due liste di reali di uguale lunghezza, restituisca il prodotto scalare delle due liste.

11

Scrivere una procedura che, data una lista di interi, restituisca una lista formata dagli stessi numeri ordinati in modo crescente.

12

Scrivere una procedura che, data una lista di reali, stampi gli elementi della lista in ordine inverso al modo in cui compaiono nella lista.

13

Scrivere una procedura che, data una lista di reali, restituisca una lista contenente i valori che nella prima lista compaiono almeno due volte.

14

Scrivere una procedura che, data una lista di reali, restituisca una lista contenente i valori che nella prima lista compaiono due volte.

15

Scrivere una procedura che, data una lista ordinata alfabeticamente di cognomi e nomi di persone e il cognome e nome di una nuova persona, inserisca il nuovo valore nella lista, rispettando l'ordinamento

16

Date due liste di record anagrafici ordinate in senso alfabetico in base al cognome e, a parità di cognome, in base al nome, fonderle in un'unica lista che deve risultare ordinata nello stesso senso e senza doppioni.

17

Si formulino gli algoritmi di inserimento e cancellazione in una catena semplice nel caso in cui si voglia cancellare solo il primo elemento o inserirne uno come primo elemento. Si indichi con K l'informazione da memorizzare e con PO il puntatore al primo elemento.

18

Per la cancellazione di un elemento da una catena semplice occorre conoscere il puntatore H all'elemento che si vuole cancellare ed il puntatore Q al suo predecessore.

19

Si vogliono effettuare le operazioni di inserzione e di cancellazione in una catena libera. Si indichino con K l'informazione da memorizzare, con PL il puntatore alla catena libera, con H il puntatore all'elemento da cancellare o dopo il quale si vuole inserire, con Q il puntatore all'elemento predecessore di H.

20

Si definisca l'algoritmo di ricerca per una catena circolare. Si indichi con K la chiave da ricercare e con PO il puntatore alla catena.

21

Si definiscano gli algoritmi di inserimento e cancellazione in una catena circolare. Si indichi con K la chiave da inserire, con H il puntatore all'elemento che si vuole cancellare o dopo il quale si vuole fare l'inserimento, con Q il puntatore all'elemento predecessore a quello puntato da H, con DISP il puntatore all'elemento da inserire.

22

Si definiscano gli algoritmi di ricerca, inserimento e cancellazione per una catena bidirezionale.

23

Scrivere una procedura che ricerca un elemento in una lista e restituisce una nuova lista contenente i numeri corrispondenti alle posizioni in cui compare l'elemento nella lista data.
(Es: 1, 5, 8 se l'elemento compare al 1º, 5º e 8º posto nella lista data).

24

Realizzare un procedura per invertire l'ordine degli elementi di una lista.

25

I programmi che devono essere mandati in esecuzione, in un sistema di elaborazione, vengono inseriti in una lista, ordinati secondo le priorità di esecuzione. Per ogni programma sono noti: un codice numerico di identificazione ed una carattere alfabetico che ne specifica la precedenza di esecuzione.
Specificare:
1. come sono costituiti gli elementi della lista dei programmi;
2. come avviene la gestione della lista per l'inserimento di un nuovo programma;
3. come può essere realizzata tale lista con le strutture dati conosciute, per la programmazione in Pascal.
Scrivere:
1. la parte del programma Pascal relativa alla definizione dei tipi ed alla dichiarazione delle variabili per la gestione di tale lista;
2. il programma relativo all'inserimento di un nuovo elemento nella lista, opportunamente commentata.
Precisare tutte le ipotesi aggiuntive che si ritiene necessarie per rispondere ai problemi proposti.

26

Volendo lavorare con insiemi di informazioni organizzati a lista può essere opportuno avere, già predisposte, delle routine di tipo function o procedure per la gestione delle liste.
1. dire quante e quali routine ritenete opportuno predisposte;
2. per ognuna delle routine specificare:
a. che cosa fa;
b. quali parametri vanno passati e in che forma;
c. eventuali condizioni o limitazioni per l'uso.
Sviluppare una di tali routine dall'analisi del problema fino alla codifica in Pascal.

27

Alla sede centrale di una banca arrivano, dalle filiali, le richieste di banconote in valuta estera per l'ufficio cambi. Ogni filiale richiede denaro in valuta estera nelle diverse valute, secondo le sue esigenze. La sede centrale evade le richieste secondo le disponibilità di valuta. Ad ogni richiesta in arrivo e per ogni richiesta evasa deve essere aggiornato l'insieme dei dati.
Si richiede:
1. specificare quali sono le informazioni che servono per gestire il servizio;
2. descrivere una possibile organizzazione di tali informazioni che, utilizzando strutture di lista, permetta di soddisfare le esigenze esposte;
3. descrivere la procedura di aggiornamento da eseguire per ogni richiesta in arrivo da una filiale;
4. descrivere la procedura di aggiornamento da eseguire per ogni richiesta evasa.
Le descrizioni vanno sviluppate in Linguaggio di Progetto, eventualmente con livelli diversi di raffinamento. Specificare le ipotesi aggiuntive che si ritengono opportune (purché non stravolgano lo spirito del problema).

28

Date due liste L1 e L2 costruire la concatenazione di L1 ed L2, cioè la lista ottenuta da L1 attaccando in fondo ad L1 gli elementi della lista L2.

29

Realizzare in linguaggio C una funzione che riceva in ingresso due liste di interi, ordinate in modo crescente, e le fonda assieme restituendone una sola, anch'essa ordinata nello stesso verso.

30

Scrivere la function MINORI(X:univ; L:lista):lista che restituisce la lista degli elementi di L minori di X.

31

Scrivere la function Alternata(L:lista):lista che restituisce gli elementi di L di posto dispari.
Esempio: Alternata([27,35,12,18]) * [27,12]

32

Data una lista L e un elemento X si vuole sapere in che posizione compare nella lista L. Restituire 0 se non compare e la posizione minima se compare più volte.

33

Data una stringa costruire una lista che ha per elementi i caratteri della stringa.
Esempio: 'esempio' * ['e','s','e','s','e','m','p','i','o']

34

Data una lista di caratteri costruire la stringa costituita dagli stessi caratteri

35

Trovare il minimo e il massimo di una lista.

36

Dare l'ultimo elemento di una lista.

37

Dare il penultimo elemento di una lista.

38

Data una lista restituire la stessa lista senza l'ultimo elemento.

39

Dare l'i-esmo elemento di una lista.

40

Dare la sottolista lunga n di L che parte dall'i-esmo elemento.

41

Data una lista L restituire la stessa lista senza l'i-esimo elemento.

42

Stabilire se gli elementi di una lista sono tutti uguali fra loro.

43

Un insieme può essere rappresentato da una lista. Scrivere le operazioni per:
1. aggiungere un elemento all'insieme;
2. sapere se un elemento appartiene all'insieme;
3. effettuare l'unione di due insiemi;
4. effettuare la differenza di due insiemi;
5. effettuare l'intersezione di due insiemi.

44

Data una lista L e due indici i e j restituire la stessa lista in cui gli elementi di posto i e di posto j risultino scambiati.

45

Data una lista di caratteri costruire la stringa costituita dagli stessi caratteri ("implode" di un stringa").

46

Per valutare quantitativamente il vantaggio apportato dall'uso delle liste concatenate, semplici o doppie, si può ricorrere ad una semplice situazione come la seguente.
Si abbia la necessità di gestire un elenco di nominativi, ordinati alfabeticamente, e sottoposto a continui aggiornamenti. Si utilizzino, per risolvere il problema, le tre strutture vettore, lista concatenata semplice, lista doppia concatenata, valutando i tempi di esecuzione degli inserimenti, delle cancellature, delle correzioni al singolo elemento.
Non è detto che tali tempi risultino, anche nell'ambito della stessa struttura, costanti.