informatica 3 lezione 12: liste - intranet deibhome.deib.polimi.it/comai/info3/file/lezione 12 -...
TRANSCRIPT
![Page 1: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/1.jpg)
Politecnico di Milano - Prof. Sara Comai 1
LEZIONE 12: Liste
• Modulo 1: ADT lista e implementazione basata su array
• Modulo 2: Lista concatenata
Informatica 3
![Page 2: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/2.jpg)
Politecnico di Milano - Prof. Sara Comai 2
Lezione 12 - Modulo 1
ADT lista e implementazione basata su array
Informatica 3
![Page 3: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/3.jpg)
Politecnico di Milano - Prof. Sara Comai 3
Introduzione
• Scopo: confrontare implementazioni diverse
• Definizione di lista – Sequenza ordinata e finita di dati o elementi
• ogni elemento della lista è caratterizzato da una posizione
– Notazione: <a0, a1, …, an-1>
posizione
![Page 4: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/4.jpg)
Politecnico di Milano - Prof. Sara Comai 4
Posizione corrente
• Considereremo liste caratterizzate dal concetto di posizione corrente– La posizione corrente definisce la partizione sinistra e
la partizione destra di una lista – La posizione corrente funziona da separatore e la
indicheremo con il simbolo |
– Esempio: <20, 23 | 12, 15>
posizione corrente
partizionesinistra
partizionedestra
![Page 5: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/5.jpg)
Politecnico di Milano - Prof. Sara Comai 5
ADT lista
template <class Elem> class List {public:virtual void clear() = 0;virtual bool insert(const Elem&) = 0;virtual bool append(const Elem&) = 0;virtual bool remove(Elem&) = 0;virtual void setStart() = 0;virtual void setEnd() = 0;virtual void prev() = 0;virtual void next() = 0;virtual int leftLength() const = 0;virtual int rightLength() const = 0;virtual bool setPos(int pos) = 0;virtual bool getValue(Elem&) const = 0;virtual void print() const = 0;
};
![Page 6: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/6.jpg)
Politecnico di Milano - Prof. Sara Comai 6
Esempio
Lista: <12 | 32, 15>lista.insert(99);
Lista risultante: <12 | 99, 32, 15>
Esempio di uso di funzioni per iterare sulla lista:
for (lista.setStart(); lista.getValue(elemento);lista.next()){
// operazioni su elemento...
}
![Page 7: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/7.jpg)
Politecnico di Milano - Prof. Sara Comai 7
Implementazione della lista
• Due approcci standard: – Lista basata su array
– Lista concatenata con puntatori
![Page 8: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/8.jpg)
Politecnico di Milano - Prof. Sara Comai 8
Implementazione lista basata su arrayOperazione di inserimento:• in testa
• in codaInserisci 25
25
Inserisci 23
![Page 9: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/9.jpg)
Politecnico di Milano - Prof. Sara Comai 9
Implementazione lista basata su arrayOperazione di cancellazione:
– Es. Cancella 12
posizione corrente
![Page 10: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/10.jpg)
Politecnico di Milano - Prof. Sara Comai 10
Classe lista basata su array (1)
template <class Elem> // Array-based listclass AList : public List<Elem> {
private:int maxSize; // Maximum size of listint listSize; // Actual elem countint fence; // Current position (fence)Elem* listArray; // Array holding list
public:AList(int size=DefaultListSize) { //Constructor
maxSize = size;listSize = fence = 0;listArray = new Elem[maxSize];
} operazione costosa
> Θ(1)
![Page 11: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/11.jpg)
Politecnico di Milano - Prof. Sara Comai 11
Classe lista basata su array (2)
...
void prev() { if (fence != 0) fence--; }
bool setPos(int pos) {if ((pos >= 0) && (pos <= listSize))
fence = pos;return (pos >= 0) && (pos <= listSize);
}
Θ(1)
Θ(1)
![Page 12: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/12.jpg)
Politecnico di Milano - Prof. Sara Comai 12
Inserimento in testa
// Insert at front of right partitiontemplate <class Elem>bool AList<Elem>::insert(const Elem& item) {
if (listSize == maxSize) return false;
for(int i=listSize; i>fence; i--){// Shift Elems up to make roomlistArray[i] = listArray[i-1];
}listArray[fence] = item;listSize++; // Increment list sizereturn true;
}
Θ(n)
![Page 13: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/13.jpg)
Politecnico di Milano - Prof. Sara Comai 13
Inserimento in coda
// Append Elem to end of the listtemplate <class Elem>bool AList<Elem>::append(const Elem& item) {
if (listSize == maxSize) return false;listArray[listSize++] = item;return true;
}
Θ(1)
![Page 14: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/14.jpg)
Politecnico di Milano - Prof. Sara Comai 14
Cancellazione
// Remove and return first Elem in right// partitiontemplate <class Elem> bool AList<Elem>::remove
(Elem& it) {if (rightLength() == 0) return false;it = listArray[fence]; // Copy Elemfor(int i=fence; i<listSize-1; i++)
// Shift them downlistArray[i] = listArray[i+1];
listSize--; // Decrement sizereturn true;
}
Θ(n)nel caso medio
![Page 15: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/15.jpg)
Politecnico di Milano - Prof. Sara Comai 15
Lezione 12 - Modulo 2
Lista concatenata
Informatica 3
![Page 16: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/16.jpg)
Politecnico di Milano - Prof. Sara Comai 16
Implementazione lista basata su puntatori
• Implementazione basata su puntatori: – lista concatenata (linked list)
– Alloca la memoria dinamicamente• alloca solamente la memoria necessaria
– La lista concatenata è composta da una serie di oggetti, detti nodi della lista
• classe nodo separata (riusabile)
![Page 17: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/17.jpg)
Politecnico di Milano - Prof. Sara Comai 17
Nodo della lista: classe Link
// Singly-linked list nodetemplate <class Elem> class Link {
public:Elem element; // Value for this nodeLink *next; // Pointer to next node
//constructor with initial valueLink(const Elem& elemval, Link* nextval = NULL)
{ element = elemval; next = nextval; }
//constructor without initial valueLink(Link* nextval = NULL)
{ next = nextval; }};
![Page 18: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/18.jpg)
Politecnico di Milano - Prof. Sara Comai 18
Inserimento (1)• Operazione di inserimento
• Problema: lista vuota, partizione di sinistra vuota– gestione di casi particolari
testa
testa
coda
coda
posizione corrente
posizione corrente
![Page 19: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/19.jpg)
Politecnico di Milano - Prof. Sara Comai 19
Inserimento (2)• Operazione di inserimento con nodo testa
testa codaposizione corrente
testa codaposizione corrente
![Page 20: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/20.jpg)
Politecnico di Milano - Prof. Sara Comai 20
Inserimento (3)
• Inserimento di un nuovo nodo: 1. creazione del nuovo nodo2. impostazione del puntatore
next del nuovo nodo al primo nodo della partizione di destra
3. impostazione del puntatore next dell’ultimo nodo della partizione di sinistra al nuovo nodo
posizione corrente
posizione corrente
Es: inserisci 10
![Page 21: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/21.jpg)
Politecnico di Milano - Prof. Sara Comai 21
Cancellazione
• Cancellazione di un nodo: posizione corrente
posizione corrente
elemento da cancellare
![Page 22: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/22.jpg)
Politecnico di Milano - Prof. Sara Comai 22
Classe lista concatenata (1)
/ Linked list implementationtemplate <class Elem> class LList:
public List<Elem> {
private:
Link<Elem>* head; // Point to list headerLink<Elem>* tail; // Pointer to last ElemLink<Elem>* fence;// Last element on leftint leftcnt; // Size of leftint rightcnt; // Size of right
void init() { // Intialization routinefence = tail = head = new Link<Elem>;leftcnt = rightcnt = 0;
}
![Page 23: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/23.jpg)
Politecnico di Milano - Prof. Sara Comai 23
Classe lista concatenata (2)
void removeall() { //Return link nodes to free storewhile(head != NULL) {
fence = head;head = head->next;delete fence;
}}
public:
LList(int size=DefaultListSize){ init(); }
~LList() { removeall(); } // Destructor
...
![Page 24: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/24.jpg)
Politecnico di Milano - Prof. Sara Comai 24
Inserimento
// Insert at front of right partitiontemplate <class Elem>bool LList<Elem>::insert(const Elem& item) {
fence->next = new Link<Elem>(item, fence->next); if (tail == fence)
tail = fence->next; rightcnt++;return true;
}// Append Elem to end of the listtemplate <class Elem>bool LList<Elem>::append(const Elem& item) {
tail = tail->next = new Link<Elem>(item, NULL);rightcnt++;return true;
}
Θ(1)
Θ(1)
![Page 25: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/25.jpg)
Politecnico di Milano - Prof. Sara Comai 25
Cancellazione
// Remove and return first Elem in right partitiontemplate <class Elem> bool LList<Elem>::remove(Elem& it){
if (fence->next == NULL) return false;
it = fence->next->element; // Remember valLink<Elem>* ltemp = fence->next; // Remember link nodefence->next = ltemp->next; // Removeif (tail == ltemp) // Reset tail
tail = fence;delete ltemp; // Reclaim spacerightcnt--;return true;
}
Θ(1)(assumendo l’operazione di delete costante)
![Page 26: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/26.jpg)
Politecnico di Milano - Prof. Sara Comai 26
Elemento precedente
// Move fence one step left;// no change if left is emptytemplate <class Elem> void LList<Elem>::prev() {
Link<Elem>* temp = head;if (fence == head)
return; // No prev Elemwhile (temp->next!=fence)
temp=temp->next;fence = temp;leftcnt--;rightcnt++;
}
Θ(n)
![Page 27: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/27.jpg)
Politecnico di Milano - Prof. Sara Comai 27
Setpos
// Set the size of left partition to postemplate <class Elem>bool LList<Elem>::setPos(int pos) {
if ((pos < 0) || (pos > rightcnt+leftcnt)) return false;
fence = head;for(int i=0; i<pos; i++)
fence = fence->next;return true;
}
Θ(i)
![Page 28: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/28.jpg)
Politecnico di Milano - Prof. Sara Comai 28
Confronto tra le implementazioni
Operazione Lista basata su array Lista concatenata
Inserimento e cancellazione Θ(n) Θ(1)Accesso diretto e elemento Θ(1) Θ(n)precedenteSpazio occupato Allocazione a priori Allocazione
dinamicaOverhead Nessuno se le posizioni Per ogni
sono piene elemento
![Page 29: Informatica 3 LEZIONE 12: Liste - Intranet DEIBhome.deib.polimi.it/comai/info3/File/Lezione 12 - Liste big.pdf · Politecnico di Milano - Prof. Sara Comai 3 Introduzione • Scopo:](https://reader031.vdocuments.pub/reader031/viewer/2022020305/5c000f3a09d3f265378ba16d/html5/thumbnails/29.jpg)
Politecnico di Milano - Prof. Sara Comai 29
Confronto di spazio
Punto di pareggio:
E: Spazio per memorizzare il valore dell’elementoP: Spazio per il puntatoreD: Numero di elementi dell’arrayn: numero di elementi della lista
DE = n(P + E);
n = DE Se P==E allora n=D/2P + E