Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

Cenni teorici - Nodi e liste concatenate

informatica



Cenni teorici

In questa esercitazione si è reso necessario utilizzare due strutture dati molto importanti: la pila e la coda. Per implementare queste due classi è però necessario affrontare le liste.


Nodi e liste concatenate

In informatica si possono dare due definizioni di lista, una sequenziale e una ricorsiva.


DEFINIZIONE SEQUENZIALE

Una lista è un insieme di elementi in cui 929f59j ogni elemento, tranne il primo e l'ultimo, hanno un solo predecessore e un solo successore

DEFINIZIONE RICORSIVA

Una lista è una lista vuota oppure è una coppia di elementi ( i , l ) dove i è un informazione ed è detta testa della lista, mentre l è a sua volta una lista ed è detta coda della lista.


Per implementare una lista viene utilizzata una classe Nodo, che rappresenta ogni nodo della lista. Ogni nodo è caratterizzato da un campo informazione e da un puntatore al nodo successivo della lista. Se il puntatore è null allora significa che la lista è terminata. La classe Nodo è implementata nel seguente modo:




public class Nodo




Ciò che segue è una semplice rappresentazione di una lista:











Per costruire una lista come quella scritta sopra si può usare il seguente frammento di codice:

Nodo a = new Nodo(a1,null);

Nodo b = new Nodo(a2,null);

Nodo c = new Nodo(a3,null);

a.next = b;

b.next = c;


Per visitare una lista in modo iterativo si può far riferimento al seguente algoritmo:


Nodo n = a;   // a è il puntatore d'accesso alla lista

while (n!=null)


Per inserire un elemento in testa basta usare il seguente frammento di codice:


n.next = first; // n è il nodo da inserire

first = n; // first è il puntatore d'accesso


Per inserire un elemento in mezzo o in coda bisogna prima posizionarsi sul nodo precedente tramite un nodo d'appoggio (prec) e poi si può inserire, in questo modo:


n.next = prec.next; // n è il nodo da inserire

prec.next = n;


Per eliminare un elemento in testa basta rifarsi al seguente frammento di codice:


first = first.next;


Per eliminare un elemento in mezzo o in coda bisogna prima posizionarsi sul nodo precedente tramite un nodo d'appoggio (prec) e poi si può cancellare, in questo modo:


prec.next = prec.next.next;


Ci sono altri tipi di lista, come la lista doppiamente concatenate o la lista circolare, ma in questa tesina non ne parliamo, quindi passeremo a trattare le pile e le code.


Pila

Una pila è una successione di elementi in cui 929f59j tutte le operazioni di inserimento e di cancellazione avvengono dallo stesso estremo detto testa della pila. La pila esegue una disciplina LIFO(Last In First Out). Le pile sono molto utilizzate per controllare le chiamate ai sottoprogrammi. Le pile possono essere implementate in maniera illimitata, attraverso una lista, o in maniera limitata, attraverso un vettore.

In questa tesina vedremo solo l'utilizzo di una pila illimitata. Il diagramma UML di una classe Pila è il seguente:


Pila

- testa: Nodo



+ Pila()

+ isEmpty():boolean

+ top():Object

+ pop()

+ push(obj:Object)


Le operazioni che si possono eseguire su una pila sono quindi le seguenti:

push (x) : inserisce l'elemento x nella pila;

pop ( ) : elimina l'elemento in testa alla lista senza ritornarlo;

top ( ) : restituisce l'elemento in testa alla pila senza rimuoverlo;

isEmpty ( ) : indica se la pila è vuota;


Coda

Una coda è una struttura dati che utilizza la disciplina FIFO ( First In First Out ). Anche le code possono essere implementate, come le pile, o in modo illimitato, con delle liste concatenate, o in modo limitato, con un vettore.

In questa tesina vedremo solo l'utilizzo di una coda illimitata. Il diagramma UML di una classe Coda è il seguente:


Coda

- first: Nodo

- last: Nodo

+ Coda()

+ isEmpty():boolean

+ front():Object

+ dequeue()

+ enqueue(obj:Object)


Le operazioni che si possono eseguire su una coda sono quindi le seguenti:

enqueue (x) : inserisce l'elemento x in fondo alla coda;

dequeue ( ) : elimina l'elemento in testa alla coda senza ritornarlo;

front ( ) : restituisce l'elemento in testa alla coda senza rimuoverlo;

isEmpty ( ) : indica se la coda è vuota;







Privacy




Articolo informazione


Hits: 2062
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024