liste concatenate - intranetdemarco/sd/lezioni/lezione03.pdf · liste concatenate collezione...
Post on 16-Feb-2019
230 Views
Preview:
TRANSCRIPT
Liste concatenateListe concatenate
Collezione ordinata di nodi
ciascun nodo contiene due riferimenti:
- un riferimento "element" a un elemento- un riferimento "next" ad un altro nodo
head
Anna
next next next next
element element element element
Carlo Paolo Simona
tail
Strutture Dati
...
0 21 N-1
somiglianze: ordinamento lineare
differenze:la lista concatenata non ha bisogno di una taglia fissata a priori come accade per l'array (pu usare uno spazio propozionale al numero dei suoi elementi)
Lista concatenata
array
Strutture Dati
Liste concatenateListe concatenate
La classe NodoLa classe NodoImplementazione Java Implementazione Java
public class Node {private E element;private Node next;public Node(E e, Node n){
element = e;next = n;
}public Node(){
this(null,null);}public E getElement(){
return element;}public Node getNext(){
return next;}public void setElement(E newElem) {
element = newElem;}public void setNext(Node newNext){
next = newNext;}
}
element
next
Strutture Dati
Liste concatenateListe concatenateImplementazione della pila con liste concatenateImplementazione della pila con liste concatenate
lelemento in cima alla pila memorizzato nel primo nodo della lista
head (cima della pila)
ay x v
Strutture Dati
inserimento di un nuovo elemento e nella pila (push(e))
Liste concatenateListe concatenateImplementazione della pila con liste concatenateImplementazione della pila con liste concatenate
lelemento in cima alla pila memorizzato nel primo nodo della lista
head (cima della pila)
ay x v
Strutture Dati
- creiamo un nuovo nodo
Liste concatenateListe concatenateImplementazione della pila con liste concatenateImplementazione della pila con liste concatenate
inserimento di un nuovo elemento e nella pila (push(e))
head (cima della pila)
ay x v
lelemento in cima alla pila memorizzato nel primo nodo della lista
Strutture Dati
- creiamo un nuovo nodo
Liste concatenateListe concatenateImplementazione della pila con liste concatenateImplementazione della pila con liste concatenate
inserimento di un nuovo elemento e nella pila (push(e))
head (cima della pila)
ay x v
lelemento in cima alla pila memorizzato nel primo nodo della lista
- definiamo il riferimento all'elemento e
e
Strutture Dati
- creiamo un nuovo nodo
Liste concatenateListe concatenateImplementazione della pila con liste concatenateImplementazione della pila con liste concatenate
inserimento di un nuovo elemento e nella pila (push(e))
head (cima della pila)
ay x v
lelemento in cima alla pila memorizzato nel primo nodo della lista
- definiamo il riferimento all'elemento e
e
- definiamo il riferimento al nodo successivo
Strutture Dati
- creiamo un nuovo nodo
inserimento di un nuovo elemento e nella pila (push(e))
head (cima della pila)
ay x v
lelemento in cima alla pila memorizzato nel primo nodo della lista
- definiamo il riferimento all'elemento e
e
- definiamo il riferimento al nodo successivo- aggiorniamo il riferimento al nodo cima della pila
Strutture Dati
Liste concatenateListe concatenateImplementazione della pila con liste concatenateImplementazione della pila con liste concatenate
package stack;
import linkedList.Node;//linkedList e` il pacchetto dove abbiamo inserito la classe Node
public class NodeStack implements Stack{protected Node top;protected int size;public NodeStack(){
top = null;size = 0;
}public int size() {
return size;}public boolean isEmpty() {
return (size == 0); }...}
Strutture Dati
Liste concatenateListe concatenateImplementazione della pila con liste concatenateImplementazione della pila con liste concatenate
public class NodeStack implements Stack{...
public E top() throws EmptyStackException {if (isEmpty()) throw new EmptyStackException("Lo stack e` vuoto.");return top.getElement();
}public void push(E element) {
Node v = new Node(element,top);top = v;size++;
}
public E pop() throws EmptyStackException {if (isEmpty()) throw new EmptyStackException("Lo stack e` vuoto.");E temp = top.getElement();top = top.getNext();size--;return temp;
}
...}
Strutture Dati
Liste concatenateListe concatenateImplementazione della pila con liste concatenateImplementazione della pila con liste concatenate
aye x v
head (front della coda) tail (rear della coda)
il front della coda memorizzato nel primo nodo (head) della lista
il rear della coda memorizzato nellultimo nodo (tail) della lista
Liste concatenateListe concatenateImplementazione della coda con liste concatenateImplementazione della coda con liste concatenate
Strutture Dati
Vantaggi:
- non si deve specificare a priori un limite superiore alla taglia della pila o della coda (una pila o una coda di n elementi richieder sempre uno spazio di dimensione O(n))
- tutte le operazioni richiedono tempo O(1)
Svantaggi:
- l'implementazione leggermente meno semplice di quella con array
- lo spazio di memoria richiesto da ciascun elemento un po' maggiore rispetto alla soluzione con array
Liste concatenateListe concatenateImplementazione della pila e della codaImplementazione della pila e della coda
Strutture Dati
La struttura dati Coda Doppia La struttura dati Coda Doppia (Deque)(Deque)
E` un'estensione della struttura dati Coda
in
out
in
out
- cancellazioni e inserimenti sono possibili da entrambe le estremit (front e rear)
Strutture Dati
Il tipo astratto di dati dequeIl tipo astratto di dati deque
Dati: oggetti arbitrari
Operazioni:- void addFirst(E e): inserisce un nuovo elemento e all'inizio di D
- void addLast(E e): inserisce un nuovo elemento e alla fine di D
- EremoveFirst(): restituisce e rimuove il primo elemento di D
- E removeLast(): restituisce e rimuove l'ultimo elemento di D
- E getFirst(): restituisce il primo elemento di D
- E getLast(): restituisce l'ultimo elemento di D
- Integer size(): restituisce il numero di elementi di D
- Boolean isEmpty(): vero se D vuota, falso altrimenti
Tipo di dati e operazioniTipo di dati e operazioni
Strutture Dati
Si verifica una EmptyDequeExceptionquando si invoca uno dei seguenti metodi su una deque vuota.
- E removeFirst()
- E removeLast()
- E getFirst()
- E getLast()
Le eccezioni Le eccezioni Il tipo astratto di dati dequeIl tipo astratto di dati deque
Strutture Dati
Implementazione dequeImplementazione dequeL'interfaccia L'interfaccia
public interface Deque {
public int size();
public boolean isEmpty();
public E getFirst() throws EmptyDequeException;
public E getLast() throws EmptyDequeException;
public void addFirst (E element);
public void addLast (E element);
public E removeFirst() throws EmptyDequeException;
public E removeLast() throws EmptyDequeException;}
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
headtail
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
headtail
come facciamo una removeLast()?
Strutture Dati
headtail
come facciamo una removeLast()?
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
headtail
come facciamo una removeLast()?
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
headtail
come facciamo una removeLast()?
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
headtail
come facciamo una removeLast()?
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
headtail
questa soluzione inefficiente perch removeLast() richiederebbe tempo O(n), dove n il numero di elementi nella deque
tempo necessario per aggiornare il riferimento next dell'ultimo nodo e il riferimento al nodo tail
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
header trailer
Ciascun nodo contiene un riferimento (next) al nodo successivo e un riferimento (prev) al nodo precedente;
Per semplificare la programmazione si usano due nodi speciali detti nodi sentinella: nodo header - next contiene un riferimento al primo nodo della deque - prev contiene null nodo trailer - prev contiene un riferimento all'ultimo nodo della deque - next contiene null
nextprev
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
Inserimento in testa di un nuovo elemento
Tizio
CaioSempronio
header trailer
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
Tizio
CaioSempronio
Inserimento in testa di un nuovo elemento
header trailer
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
Tizio
CaioSempronio
Inserimento in testa di un nuovo elemento
header trailer
Strutture Dati
Implementazione dequeImplementazione dequeSoluzione con liste concatenateSoluzione con liste concatenate
Liste doppiamente concatenateListe doppiamente concatenateLa classe DLNodeLa classe DLNode
public class DLNode {
private E element; private DLNode next, prev;
public DLNode() { this(null, null, null); } public DLNode(E e, DLNode p, DLNode n) { element = e; next = n; prev = p; }
public void setElement(E newElem) { element = newElem; } public void setNext(DLNode newNext) { next = newNext; } public void setPrev(DLNode newPrev) { prev = newPrev; } public E getElement() { return element; } public DLNode getNext() { return next; } public DLNode getPrev() { return prev; }}
element
nextprev
Strutture Dati
La struttura dati array listLa struttura dati array list
E` un contenitore di elementi organizzati secondo unordinamento lineare:
primo elemento, secondo elemento, ...
Strutture Dati
cancellazioni e inserimenti sono possibili in posti arbitrari
E` un contenitore di elementi organizzati secondo unordinamento lineare:
primo elemento, secondo elemento, ...
Strutture Dati
La struttura dati array listLa struttura dati array list
cancellazioni e inserimenti sono possibili in posti arbitrari
E` un contenitore di elementi organizzati secondo unordinamento lineare:
primo elemento, secondo elemento, ...
inserimento di un nuovo oggetto
Strutture Dati
La struttura dati array listLa struttura dati array list
cancellazioni e inserimenti sono possibili in posti arbitrari
E` un contenitore di elementi organizzati secondo unordinamento lineare:
primo elemento, secondo elemento, ...
cancellazione di un oggetto
Strutture Dati
La struttura dati array listLa struttura dati array list
cancellazioni e inserimenti sono possibili in posti arbitrari
E` un contenitore di elementi organizzati secondo unordinamento lineare:
primo elemento, secondo elemento, ...
cancellazione di un oggetto
Strutture Dati
La struttura dati array listLa struttura dati array list
L'accesso agli elementi avviene per mezzo del loro indice
Dato un array list S di n elementi,possiamo riferirci univocamente a ciascun elemento di S attraverso il suo indice:
l'ndice di un elemento e in S il numero di elementi che precedono e in S
S
elemento di indice 3
elemento di indice 0
L'indice di un elemento e rappresenta la posizione di e all'interno dell' ordinamento lineare della struttura:
l'elemento i-esimo ha indice i - 1
Strutture Dati
La struttura dati array listLa struttura dati array list
S
elemento di indice 3
elemento di indice 0
Naturalmente:
l'indice di un elemento e si pu modificare in seguito a inserimenti e cancellazioni
Prima
Strutture Dati
La struttura dati array listLa struttura dati array list
SInserimento
Strutture Dati
La struttura dati array listLa struttura dati array list
Naturalmente:
l'indice di un elemento e si pu modificare in seguito a inserimenti e cancellazioni
S
elemento di indice 4
elemento di indice 1
Dopo
Strutture Dati
La struttura dati array listLa struttura dati array list
Naturalmente:
l'indice di un elemento e si pu modificare in seguito a inserimenti e cancellazioni
Il tipo astratto di dati array listIl tipo astratto di dati array listTipo di dati e operazioniTipo di dati e operazioni
Dati: oggetti arbitrari
Operazioni:- get(i): restituisce l'elemento di indice i
- set(i, e): restituisce e rimpiazza l'elemento di indice i con lelemento e
- add(i, e): inserisce un nuovo elemento e di indice i - remove(i): restituisce e rimuove l'elemento di indice i
- size()
- isEmpty()
Strutture Dati
Dato un array list S di n elementi, si verifica una eccezione nei seguenti casi:
get(i) con i < 0 oppure i > n - 1
set(i, e) con i < 0 oppure i > n - 1
remove(i) con i < 0 oppure i > n 1
add(i, e) con i < 0 oppure i > n
Le eccezioni Le eccezioni Il tipo astratto di dati array listIl tipo astratto di dati array list
0 21 i n - 1
... ...S
Strutture Dati
L'interfacciaL'interfacciaImplementazione array listImplementazione array list
public interface IndexList {
public int size();
public boolean isEmpty();
public void add(int i, E e) throws IndexOutOfBoundsException;
public E get(int i) throws IndexOutOfBoundsException;
public E remove(int i) throws IndexOutOfBoundsException;
public E set(int i, E e) throws IndexOutOfBoundsException;
}
Strutture Dati
Una semplice soluzione basata su arrayUna semplice soluzione basata su arrayImplementazione array listImplementazione array list
N-1
L'array list viene implementato con un array A di N elementi e una variabile n < N che indica il numero di elementi nell'array list
A[i] mantiene un riferimento all'elemento di indice i
0 21 i n - 1
... ...
Strutture Dati
Una semplice soluzione basata su arrayUna semplice soluzione basata su arrayImplementazione array listImplementazione array list
N-1
L'array list viene implementato con un array A di N elementi e una variabile n < N che indica il numero di elementi nell'array list
A[i] mantiene un riferimento all'elemento di indice i
0 21 i n - 1
... ...
Algorithm get(i):if i < 0 or i > n-1 then
throw BoundaryViolationExceptionreturn A[i]
Strutture Dati
N-1
L'array list viene implementato con un array A di N elementi e una variabile n < N che indica il numero di elementi nell'array list
A[i] mantiene un riferimento all'elemento di indice i
0 21 i n - 1
... ...
Algorithm remove(i):if i < 0 or i > n-1 then
throw BoundaryViolationException e A[i]
for j = i, i+1, ..., n - 2 do A[j] A[j+1] n n - 1return e
e
Strutture Dati
Una semplice soluzione basata su arrayUna semplice soluzione basata su arrayImplementazione array listImplementazione array list
N-1
L'array list viene implementato con un array A di N elementi e una variabile n < N che indica il numero di elementi nell'array list
A[i] mantiene un riferimento all'elemento di indice i
0 21 i n - 1
... ...
tempo di esecuzione: (n) nel caso pessimo (quando i=0)
Algorithm remove(i):if i < 0 or i > n-1 then
throw BoundaryViolationException e A[i]
for j = i, i+1, ..., n - 2 do A[j] A[j+1] n n - 1return e
Strutture Dati
Una semplice soluzione basata su arrayUna semplice soluzione basata su arrayImplementazione array listImplementazione array list
N-1
L'array list viene implementato con un array A di N elementi e una variabile n < N che indica il numero di elementi nell'array list
A[i] mantiene un riferimento all'elemento di indice i
0 21 i n - 1
... ...
Algorithm add(i, e):if i < 0 or i > n then
throw BoundaryViolationExceptionfor j = n - 1, n - 2, ..., i do A[j+1] A[j] // fa spazio al nuovo elementoA[i] en n+1
Strutture Dati
Una semplice soluzione basata su arrayUna semplice soluzione basata su arrayImplementazione array listImplementazione array list
N-1
L'array list viene implementato con un array A di N elementi e una variabile n < N che indica il numero di elementi nell'array list
A[i] mantiene un riferimento all'elemento di indice i
0 21 i n - 1
... ...
Algorithm add(i, e):if i < 0 or i > n then
throw BoundaryViolationExceptionfor j = n - 1, n - 2, ..., i do A[j+1] A[j] // fa spazio al nuovo elementoA[i] en n+1
tempo di esecuzione: (n) nel caso pessimo (quando i=0)
e
Strutture Dati
Una semplice soluzione basata su arrayUna semplice soluzione basata su arrayImplementazione array listImplementazione array list
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Implementazione coda con array Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47
top related