Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Σχετικά έγγραφα
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

Εργαστήριο 5: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Διπλά Συνδεδεμένη Λίστα

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

Φροντιστήριο 4 Σκελετοί Λύσεων

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων & Αλγόριθμοι

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Φροντιστήριο 4 Σκελετοί Λύσεων

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Στοίβες με Δυναμική Δέσμευση Μνήμης

Διάλεξη 9: Αφηρημένοι Τύποι Δεδομένων. Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Δηάιεμε 10: Λίζηεο Υινπνίεζε & Εθαξκνγέο

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Βασικές Δομές Δεδομένων

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 08: ΛίστεςΙΙ Κυκλικές Λίστες. Διδάσκων: Παναγιώτης Ανδρέου

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διδάσκων: Παναγιώτης Ανδρέου

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

Ιδιοκτησία Αντικειµένου

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Βασικές οµές εδοµένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

υναµικές οµές εδοµένων

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

ΠΛΗ111. Ανοιξη Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Διδάσκων: Παναγιώτης Ανδρέου

Εργαστήριο 2: Πίνακες

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Διδάσκων: Κωνσταντίνος Κώστα

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

Διάλεξη 17: Επανάληψη για την ενδιάμεση εξέταση. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Δομές δεδομένων (2) Αλγόριθμοι

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Δομές Δεδομένων & Αλγόριθμοι

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

Προγραµµατισµός Ι (ΗΥ120)

Βασικές Έννοιες Δοµών Δεδοµένων

Ανάπτυξη και Σχεδίαση Λογισμικού

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1

Σημειώσεις έκτης και έβδομης εβδομάδας

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Προγραμματισμός Ι (ΗΥ120)

Διδάσκων: Παναγιώτης Ανδρέου

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

IsEmptyList(L): επιστρέφει true αν L = < >, false

Διδάσκων: Παναγιώτης Ανδρέου

Γραμμικές λίστες. Γκόγκος Χρήστος ΤΕΙ Ηπείρου

Διδάσκων: Κωνσταντίνος Κώστα

Αναδρομικοί Αλγόριθμοι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Ενότητα 2 Στοίβες Ουρές - Λίστες. ΗΥ240 - Παναγιώτα Φατούρου 1

Στοίβες Ουρές - Λίστες

Διδάσκων: Παναγιώτης Ανδρέου

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Διάλεξη 22η: Επιπλέον στοιχεία της C

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Transcript:

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) - Σύγκριση Συνδεδεμένων Λιστών με Πίνακες -Ευθύγραμμες Διπλά Συνδεδεμένες Λίστες (εισαγωγή, εύρεση) Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 1

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2 Λίστες Ο ΑΤΔ λίστα ορίζεται ως μια ακολουθία στοιχείων συνοδευόμενη από πράξεις που επιτρέπουν εισαγωγή και εξαγωγή στοιχείων σε οποιαδήποτε θέση της λίστας.(εν αντίθεση με τις στοίβες και ουρές όπου πράξεις γίνονται μόνο στα άκρα) Κάποιες βασικές πράξεις των λιστών είναι οι πιο κάτω: Concatenate(L 1, L 2 ) δημιούργησε μια νέα λίστα που περιέχει τα στοιχείατης λίστας L 1 ακολουθούμενααπό τα στοιχεία της L 2 Access(L, i) επέστρεψε το i-οστό στοιχείο της L Sublist(L,i, j) επέστρεψε τη λίστα που ξεκινά από το i-οστό και τελειώνει στο j-οστό στοιχείο της L. Insert_After(L, x, i) εισήγαγε το xμετά από το i-οστό στοιχείο της L. Delete(L, i) αφαίρεσε το i-οστό στοιχείο της L Στη συνέχεια θα μελετήσουμε υλοποιήσεις του ΑΤΔ με δυναμική χορήγηση μνήμης.

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3 Ευθύγραμμες Απλά Συνδεδεμένες Λίστες Μία λίστα μπορεί να υλοποιηθεί ως μια συνδεδεμένη λίστα (με παρόμοιο τρόπο όπως μια στοίβα). LIST Size=3 head data next data next data next NULL node node node Πιθανές δηλώσεις κόμβων είναι(χρησιμοποιείται intαντί για type): typedef struct node { int data; struct node *next; NODE; typedef struct list { NODE *head; int size; LIST;

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4 Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Βοηθητική συνάρτηση: Δημιουργία κόμβου NODE* createlistnode(int x) data next newnode NULL NODE* createlistnode(int x){ NODE *newnode = NULL; newnode = (NODE*) malloc( sizeof(node) ); newnode->data = x; newnode->next = NULL; return newnode;

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Πιο κάτω ορίζονται κάποιες χρήσιμες πράξεις. Εύρεση Κόμβου με συγκεκριμένο στοιχείο: bool existsnode(list *L, int x) bool existsnode(list *L, int x){ NODE* tmp = L->head; while( tmp!=null ) { if( tmp->data == x ) return true; tmp = tmp->next; return false; To p είναι ένα αντίγραφο της διεύθυνσης στην οποία δείχνει το L->head ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6 Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Με παρόμοιο τρόπο μπορούμε να ορίσουμε διαδικασία: NODE* findnode(list *L, int x); που επιστρέφει δείκτη προς κόμβο της λίστας που περιέχει το στοιχείο x, αν υπάρχει. NODE* findnode(list *L, int x){ NODE* tmp = L->head; while( tmp!=null ){ if( tmp->data == x ) return tmp; tmp = tmp->next; return NULL;

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7 Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Εισαγωγή κόμβου με στοιχείο x πάντα στην αρχή (παρόμοια με Στοίβα): void insertlistfront(list *L, int x); void insertlistfront(list *L, int x){ NODE *newnode = createlistnode(x); newnode->next = L->head; L->head = newnode; L->size++;

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8 Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Εισαγωγή κόμβου με στοιχείο x ΤΑΞΙΝΟΜΗΜΕΝΑ: void insertlistsorted (LIST *L, int x); void insertlistsorted ( LIST *L, int x){ NODE *newnode = createlistnode(x); NODE *tmp = L->head; if( L->size==0 ) { L->head = newnode; else { if(tmp->data>newnode- >data){ newnode->next=tmp; L- >head = newnode; else { while( (tmp!= NULL) ) { if(tmp->next == NULL) break; if(tmp->next- >data>newnode->data) break; tmp = tmp->next; newnode->next = tmp->next; tmp->next = newnode; L->size++;

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9 Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Εξαγωγή Κόμβου με συγκεκριμένη πληροφορία x : void deletenode(list *L, int x) LIST Size=3 head prev tmp 1 1 data next data next data next 2 node node node NULL 2

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10 Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Εξαγωγή Κόμβου με συγκεκριμένη πληροφορία x : void deletenode(list *L, int x) void deletenode(list *L, int x){ NODE* tmp = L->head; NODE* prev = tmp; if(!isempty(l)){ if (L->head->data == x){ L->head = L->head->next; L->size--; free(tmp); else { while( tmp!=null ){ if( tmp->data == x ){ prev->next=tmp->next; L->size--; free(tmp); break; prev = tmp; tmp = tmp->next;

Πίνακες vs.συνδεδεμένες Λίστες Όταν υλοποιούμε λίστες με πίνακες χρειάζεται να γνωρίζουμε το μέγιστο μέγεθος της λίστας εκ των προτέρων. Χρήση Χώρου Πίνακας: καταλαμβάνεται ο ίδιος χώρος άσχετα με τον αριθμό των στοιχείων που είναι αποθηκευμένα. Συνδεδεμένη Λίστα:μέγεθος της λίστας (χώρος ενός στοιχείου + χώρος ενός δείκτη) Χρόνος εισαγωγής / εξαγωγής στην αρχή Πίνακας: Ίσως χρειαστεί να μετακινήσουμε όλα τα στοιχεία Συνδεδεμένη Λίστα: Δεν μετακινείται τίποτε Χρόνος εύρεσης k-οστού στοιχείου Πίνακας: Κατευθείαν Συνδεδεμένη Λίστα: Χρειάζεται να περάσουμε από K άλλους κόμβους ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 12 Ευθύγραμμες Διπλά Συνδεδεμένες Λίστες Διπλά συνδεδεμένη λίστα (doubly-linked list)ονομάζεται μια λίστα κάθε κόμβος της οποίας κρατά πληροφορίες και για τον επόμενο και για τον προηγούμενο κόμβο: prev data next node Με αυτό τον τρόπο δίνεται η ευχέρεια μετακίνησης μέσα στη λίστα και προς τις δύο κατευθύνσεις. Παράδειγμα Λίστας: DL-LIST Size=3 head prev data next prev data next prev data next node node node NULL NULL

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 13 Διπλά Συνδεδεμένες Λίστες Ποιες δομές χρειάζονται για υλοποίηση μιας διπλά συνδεδεμένης λίστας; Ένας κόμβος ορίζεται από το πιο κάτω structure: typedef struct dlnode { int data; struct node *next; struct node *prev; DLNODE; O κόμβος που ορίζει τη διπλά συνδεδεμένη λίστα είναι ο ίδιος με αυτό που ορίζει μια στοίβα: typedef struct list { DLNODE *head; int size; DLLIST;

ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 14 Διπλά Συνδεδεμένες Λίστες Προφανώς η εισαγωγή στοιχείου σε κάποιο σημείο μιας διπλά συνδεδεμένης λίστας περιέχει κάποια επιπλέον πολυπλοκότητα από την εισαγωγή σε μια απλά συνδεδεμένη λίστα. Αυτό γιατί κάθε νέος κόμβος πρέπει να συνδεθεί και με τον επόμενο και με τον προηγούμενο κόμβο στη λίστα. Παρόμοια, κατά τις εξαγωγές στοιχείων. Παράδειγμα εισαγωγής του στοιχείου 6 μετά το 5στην πιο κάτω λίστα: DL-LIST Size=4 head prev data NULL 4 next prev data 5 next prev data next 6 prev data 8 next NULL

Η συνάρτησηput Να ορίσετε συνάρτηση put(l, x, y) η οποία τοποθετεί το στοιχείο x μετά από το στοιχείο yμέσα στη λίστα l. put(dllist *l, int x, int y){ if (l->head == NULL) printf( The list is empty, no insertion was made\n ); else { putnode(l->head, x, y); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 15

Η συνάρτησηputtnode // Τοποθέτηση x μετά το y ξεκινώντας από τον δείκτη p void putnode(dlnode *p, int x, int y){ DLNODE *q; if (p == NULL) // reached end of list (and did not find y) printf( Element %d does not exist, no insertion was made\n, y); else if ( p->data == y ) { // position found do insertion q = (DLNODE *)malloc(sizeof(dlnode)); q->data = x; q->next = p->next; q->prev = p; (p->next)->prev = q; p->next= q; else // position not found search next putnode(p->next, x, y); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 16