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



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

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

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

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

Προγραμματισμός Δομές Δεδομένων

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

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

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

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

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

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

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

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

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

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

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

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

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

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

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

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

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

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

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

ιαφάνειες παρουσίασης #6 (α)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ιαφάνειες παρουσίασης #5 (β)

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

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

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

Οντοκεντρικός Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

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

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

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

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

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

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

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

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

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

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

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

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

Προγραμματισμός Αναδρομή

Προγραμματισμός Αναδρομή

ιαφάνειες παρουσίασης #11

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

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

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

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

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

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

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

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

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

4. Συνδεδεμένες Λίστες

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

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

Συλλογές, Στοίβες και Ουρές

Διάλεξη 19η: Δομές δεδομένων

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

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

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

Insert(K,I,S) Delete(K,S)

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

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

Εργαστήριο 2 Δυναμικές Δομές Δεδομένων Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

Δοµές Δεδοµένων. 4η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες και Λίστες. Ε. Μαρκάκης

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

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

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

Transcript:

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 1 / 10

Δομές δεδομένων Ορισμός: Μια συλλογή δεδομένων που είναι οργανωμένα με συγκεκριμένο τρόπο Ένα σύνολο τελεστών που ενεργούν πάνω στη συλλογή Αλγόριθμοι που υλοποιούν τους τελεστές Παράδειγμα: Λίστα Οργάνωση: κάθε στοιχείο δείχνει στο επόμενο ή στο NULL Τελεστές: προσθήκη στην αρχή/ενδιάμεσα/στο τέλος, αφαίρεση ενός στοιχείου, εύρεση του n-οστού στοιχείου, συνένωση λιστών, κλπ Αλγόριθμοι: insert, remove, nth, κλπ Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 2 / 10

Δομές δεδομένων (2) Άλλα παραδείγματα: Ταξινομημένη λίστα Οργάνωση: κάθε στοιχείο δείχνει στο επόμενο που είναι μικρότερο (φθίνουσα) ή μεγαλύτερο (αύξουσα) ή στο NULL Τελεστές: προσθήκη στοιχείου, αφαίρεση στοιχείου, εύρεση στοιχείου, συνένωση ταξινομημένων λιστών, κλπ Αλγόριθμοι: insert (στη σωστή θέση), remove, ismember, κλπ Δέντρο Οργάνωση: κάθε στοιχείο δείχνει στα παιδιά του (ή στο NULL) Τελεστές: προσθήκη στοιχείου σε κλαδί, εύρεση ενός στοιχείου, αφαίρεση ενός στοιχείου, συνένωση δέντρων, κλπ Αλγόριθμοι: insert, remove, find, κλπ Άλλα: δυαδικό δέντρο, ισορροπημένο δέντρο, διπλά συνδεδεμένη λίστα, κυκλική λίστα, γράφος, υπεργράφος, στοίβα, ουρά, διπλή ουρά, union-find, skip-λίστα, hash table, αραιός πίνακας, κλπ Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 3 / 10

Απλά συνδεδεμένη λίστα Οργάνωση των δεδομένων Θεωρούμε τα δεδομένα διατεταγμένα γραμμικά (το ένα μετά το άλλο) Κάθε στοιχείο δείχνει στο επόμενο στη μνήμη ή στο NULL αν είναι το τελευταίο Παράδειγμα δήλωσης (λίστα ακεραίων) intlistc struct list_node int data; struct list_node *next; ; typedef struct list_node node_t; node_t *root; Αναδρομικός ορισμός Ο δείκτης root δείχνει σε (άδεια) λίστα αν είναι NULL Ο δείκτης root δείχνει σε λίστα αν δείχνει σε ένα στοιχείο struct list_node και το root->next δείχνει σε λίστα Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 4 / 10

Απλά συνδεδεμένη λίστα (2) Τελεστές Δημιουργία κενής λίστας Εισαγωγή στοιχείου πριν/μετά από άλλο στοιχείο Εύρεση συγκεκριμένου στοιχείου Διαγραφή στοιχείου Διάσχιση της λίστας Απελευθέρωση/διαγραφή λίστας Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 5 / 10

Απλά συνδεδεμένη λίστα (3) Αλγόριθμοι Δημιουργία κενής λίστας Ο κενός δείκτης NULL αναπαριστά την κενή λίστα Εισαγωγή στοιχείου πριν/μετά από άλλο στοιχείο node_t *list_insert_before(node_t *list, int data); void list_insert_after(node_t *position, int data); Εύρεση συγκεκριμένου στοιχείου node_t *list_find(node_t *list, int data); node_t *list_nth(node_t *list, int position); Διαγραφή στοιχείου node_t *list_remove_node(node_t *list, node_t *node); node_t *list_remove_data(node_t *list, int data); Διάσχιση της λίστας void list_traverse(node_t *list, void (*f)(node_t *node)); void list_print(node_t *list); Απελευθέρωση/διαγραφή λίστας void list_delete(node_t *list); Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 6 / 10

Απλά συνδεδεμένη λίστα (4) Εισαγωγή στοιχείου πριν/μετά από άλλο στοιχείο intlistc node_t *list_insert_before(node_t *list, int data) node_t *node; node = (node_t *) malloc(sizeof(node_t)); node->data = data; node->next = list; return node; void list_insert_after(node_t *position, int data) node_t *node; node = list_insert_before(position->next); position->next = node; Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 7 / 10

Απλά συνδεδεμένη λίστα (5) Εύρεση συγκεκριμένου στοιχείου intlistc node_t *list_find(node_t *list, int data) while((list!= NULL) && (list->data!= data)) list = list->next; return list; node_t *list_nth(node_t *list, int position) int i = 0; while((list!= NULL) && (i < position)) list = list->next; i++; return list; Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 8 / 10

Απλά συνδεδεμένη λίστα (6) Διαγραφή στοιχείου node_t *list_remove_node(node_t *list, node_t *node) if( list == NULL) return NULL; if( list == node) list = list->next; free(node); return list; list ->next = list_remove_node(list->next, node); return list; Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 9 / 10

Απλά συνδεδεμένη λίστα (7) Διαγραφή στοιχείου (εναλλακτικά) intlistc node_t *list_remove_node(node_t *list, node_t *node) while((list!= NULL) && (list->next!= node)) list = list->next; if( list!= NULL) list ->next = node->next; free(node); return list; Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 10 / 10