ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Ε. ΠετράκηςΛίστες1  Λίστα: πεπερασμένη σειρά στοιχείων ίδιου τύπου  Οι πράξεις εξαρτώνται από τον τύπο της λίστας και όχι από τον τύπο δεδομένων  Λίστα:
Advertisements

Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη Java • Ακέραιοι.
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
Ανασκόπηση σε Δείκτες, Ουρές, Στοίβες, Συνδεδεμένες Λίστες
ΜΑΘΗΜΑ 7ο Κυκλικές και Διπλά Συνδεδεμένες Λίστες,
Λίστες παράλειψης (skip lists) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A
Γλώσσα C & Unix Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι18/10/2010.
Πινακες (Arrays) Σημασια Συνταξη Αρχικοποιηση Προσβαση Παραμετροι
ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜMΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
Δομές Δεδομένων - Δυαδικά Δένδρα (binary trees)
TEMPLATES STANDARD TEMPLATE LIBRARY ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ C Evangelos Theodoridis.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά1 Δυναμικός Κατακερματισμός.
Αλγόριθμοι Ταξινόμησης
Ψηφιακά Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να χρησιμοποιήσουμε την παραπάνω αναπαράσταση.
Page  1 Ο.Παλιάτσου Γαλλική Επανάσταση 1 ο Γυμνάσιο Φιλιππιάδας.
11-1 ΜΑΘΗΜΑ 12 ο Γράφοι, Διάσχιση Γράφων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL
Τεχνικές Κατακερματισμού
Γραφήματα & Επίπεδα Γραφήματα
Κοντινότεροι Κοινοί Πρόγονοι α βγ θ δεζ η π ν ι κλμ ρσ τ κκπ(λ,ι)=α, κκπ(τ,σ)=ν, κκπ(λ,π)=η κκπ(π,σ)=γ, κκπ(ξ,ο)=κ ξο κκπ(ι,ξ)=β, κκπ(τ,θ)=θ, κκπ(ο,μ)=α.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Δομές Δεδομένων 1 Στοίβα. Δομές Δεδομένων 2 Στοίβα (stack)  Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή – πρώτη εξαγωγή)  Περιορισμένος.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι12-1 Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ο αλγόριθμος του Prim και ο αλγόριθμος του Kruskal.
Ε. ΠετράκηςΣτοίβες, Ουρές1 Στοίβες  Στοίβα: περιορισμένη ποικιλία λίστας  τα στοιχεία μπορούν να εισαχθούν ή να διαγραφούν μόνο από μια άκρη : λίστες.
Ουρά Προτεραιότητας: Heap
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
Lists– Λίστες 1. Αυτό-αναφορικές δομές Τα μέλη μίας δομής μπορεί να είναι οποιουδήποτε τύπου, ακόμα και δείκτες σε δομές του ίδιου τύπου. Χρησιμοποιώντας.
Δυναμικη Δεσμευση Μνημης Συνδεδεμενες Λιστες (dynamic memory allocation, linked lists) Πως υλοποιουμαι προγραμματα που δεν γνωριζουμε πριν την εκτελεση.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Πίνακας Συμβόλων Symbol Table.
Διερεύνηση γραφήματος. Ένας αλγόριθμος διερεύνησης γραφήματος επισκέπτεται τους κόμβους του γραφήματος με μια καθορισμένη στρατηγική, π.χ. κατά εύρος.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
6-1 ΜΑΘΗΜΑ 6 ο Ανασκόπηση σε Δείκτες, Συνδεδεμένες Λίστες, Ουρές, Στοίβες.
Δομές Δεδομένων - Ισοζυγισμένα Δυαδικά Δένδρα (balanced binary trees)
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες:
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη C Ακέραιοι.
ΗΥ150 – Προγραμματισμός Ξ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Δομές Δεδομένων.
Λεξικό, Union – Find Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 8-1 Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: 2-3 Δένδρα, Υλοποίηση και πράξεις Β-δένδρα B-Δένδρα.
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι115/4/2015.
Λίστες παράλειψης (skip lists) TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι13-1 Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ο αλγόριθμος Dijkstra για εύρεση βραχυτέρων μονοπατιών.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ -150 Προγραμματισμός Δομές Δεδομένων.
Δομές Δεδομένων και Αρχεία Ενότητα 10: Κυκλικά και Διπλά Συνδεδεμένη Λίστα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I.
Δομές Δεδομένων και Αρχεία
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Συνδετικότητα γραφήματος (graph connectivity). α β Υπάρχει μονοπάτι μεταξύ α και β; Παραδείγματα: υπολογιστές ενός δικτύου ιστοσελίδες ισοδύναμες μεταβλητές.
Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα:
Στοιχειώδεις Δομές Δεδομένων: Πίνακες και Λίστες
Διερεύνηση γραφήματος
EPL231 – Data Structures and Algorithms
Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε στοιχείο έχει ένα κλειδί από ολικά διατεταγμένο σύνολο Θέλουμε να υποστηρίξουμε δύο.
Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
Μεταγράφημα παρουσίασης:

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Υλοποίηση Λιστών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμές Απλά και Διπλά Συνδεδεμένες Λίστες Κυκλικές Απλά και Διπλά Συνδεδεμένες Λίστες Τεχνικές Μείωσης Μνήμης ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Λίστες Ο ΑΤΔ λίστα ορίζεται ως μια ακολουθία στοιχείων συνοδευόμενη από πράξεις που επιτρέπουν εισαγωγή και εξαγωγή στοιχείων σε οποιαδήποτε θέση της λίστας. Οι βασικές πράξεις περιλαμβάνουν τις εξής: Concatenate(L1, L2) δημιούργησε μια νέα λίστα που περιέχει τα στοιχεία της λίστας L1 ακολουθούμενα από τα στοιχεία της L2 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 Στη συνέχεια θα μελετήσουμε υλοποιήσεις του ΑΤΔ με δυναμική χορήγηση μνήμης. ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες Μία λίστα μπορεί να υλοποιηθεί ως μια συνδεδεμένη λίστα (με παρόμοιο τρόπο όπως μια στοίβα). Πιθανές δηλώσεις κόμβων είναι: typedef struct node { type data; struct node *next; } NODE; L typedef struct list { NODE *top; . . . } LIST; ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες Πιο κάτω ορίζονται κάποιες χρήσιμες πράξεις. Εύρεση Κόμβου με συγκεκριμένο στοιχείο: bool find(LIST *L, key val){ return findnode((*L).top, val); } bool findnode(NODE *P, key val){ for ( Q = P; Q != NULL; Q = (*Q).next); if (*Q).data == val) return TRUE; return FALSE; Αναδρομική Εκδοχή της findnode;; ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες Με παρόμοιο τρόπο μπορούμε να ορίσουμε διαδικασία findpointer(LIST *L, key val) που επιστρέφει δείκτη προς κόμβο της λίστας που περιέχει το στοιχείο val, αν υπάρχει. Εισαγωγή Κόμβου μετά από συγκεκριμένο κόμβο insert(LIST *L, key x,y) y w x z ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες insert(LIST *L, key x,y) { r = findpointer(L,x); if r == NULL error else q = (NODE *)malloc(sizeof(NODE)); (*q).data = y; (*q).next = (*r).next; (*r).next = q; } y q r w x z ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες Εξαγωγή Κόμβου με συγκεκριμένη πληροφορία delete(LIST *L, key x){ if (*L).top == NULL) return error Q = (*L).top; if (*Q).data == x (*L).top = (*Q).next; free(Q); else Found = False; R = Q; Q = (*Q).next; while(Q != NULL & Found==False){ if ((*Q).data == x) Found = True ; else R = Q; Q = (*Q).next; } if Q == null error else (*R).next = (*Q).next; free(Q); w x z ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Πίνακες / Συνδεδεμένες Λίστες Όταν υλοποιούμε λίστες με πίνακες χρειάζεται να γνωρίζουμε το μέγιστο μέγεθος της λίστας εκ των προτέρων. Χρήση Χώρου Πίνακας: καταλαμβάνεται ο ίδιος χώρος άσχετα με τον αριθμό των στοιχείων που είναι αποθηκευμένα. Συνδεδεμένη Λίστα: μέγεθος της λίστας  (χώρος ενός στοιχείου + χώρος ενός δείκτη) Χρόνος εισαγωγής/εξαγωγής στην αρχή πίνακας: Θ(n) συνδεδεμένη λίστα: Θ(1) Χρόνος εύρεσης k-οστού στοιχείου πίνακας: Θ(1) συνδεδεμένη λίστα: Θ(k) ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Eυθύγραμμες Διπλά Συνδεδεμένες Λίστες Διπλά συνδεδεμένη λίστα (doubly-linked list) ονομάζεται μια λίστα κάθε κόμβος της οποίας κρατά πληροφορίες και για τον επόμενο και για τον προηγούμενο κόμβο: Με αυτό τον τρόπο δίνεται η ευχέρεια μετακίνησης μέσα στη λίστα και προς τις δύο κατευθύνσεις. Παράδειγμα Λίστας: prev next size 54 42 4 3 top ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Διπλά Συνδεδεμένες Λίστες Ποιες δομές χρειάζονται για υλοποίηση μιας διπλά συνδεδεμένης λίστας; Ένας κόμβος ορίζεται από το πιο κάτω structure: typedef struct dlnode { int data; struct dlnode *prev; struct dlnode *next; } DLNODE; O κόμβος που ορίζει τη διπλά συνδεδεμένη λίστα είναι ο ίδιος με αυτό που ορίζει μια στοίβα: typedef struct dllist { DLNODE *top; ... } DLLIST; ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Διπλά Συνδεδεμένες Λίστες Προφανώς η εισαγωγή στοιχείου σε κάποιο σημείο μιας διπλά συνδεδεμένης λίστας περιέχει κάποια επιπλέον πολυπλοκότητα από την εισαγωγή σε μια απλά συνδεδεμένη λίστα. Αυτό γιατί κάθε νεοδημιούργητος κόμβος πρέπει να συνδεθεί και με τον επόμενο και με τον προηγούμενο κόμβο στη λίστα. Παρόμοια, κατά τις εξαγωγές στοιχείων. Παράδειγμα εισαγωγής του στοιχείου 50 μετά το 42 στη λίστα της διαφάνειας 9: 3 4 4 42 54 50 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

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

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Η συνάρτηση puttnode void putnode(DLNODE *p, int x, int y){ DLNODE *q; if ( p->data == y ) { q = (DLNODE *)malloc(sizeof(DLNODE)); q->data = x; q->next = p->next; q->prev = p; if ((p->next) != NULL) (p->next)->prev = q; p->next= q; } else if (p == NULL) printf(“Element %d does not exist, no insertion was made\n”, y); else putnode(p->next, x, y); ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Κυκλικές Απλά Συνδεδεμένες Λίστες Μια κυκλική λίστα μπορεί να παίξει το ρόλο της ουράς, της οποίας και τα δύο άκρα είναι προσιτά με τη βοήθεια ενός μόνο δείκτη. O κόμβος που ορίζει την κυκλική απλά συνδεδεμένη λίστα είναι: typedef struct clist { DLNODE *back; … } CLIST; Το πίσω άκρο, δηλαδή το άκρο όπου γίνονται οι εισαγωγές, είναι αυτό που δείχνεται από τον δείκτη στη λίστα (Cycle). Άρα οι εξαγωγές γίνονται ακριβώς μετά από τον κόμβο που δείχνεται από τον δείκτη Cycle. Α Β Γ Δ Cycle ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Κυκλικές Απλά Συνδεδεμένες Λίστες Ο κόμβος εξόδου μπορεί να διαγραφεί με τη διαδικασία key delete(CLIST *Cycle) { Q = (*Cycle).back print (Q->next)->data P = (Q->next)->next; free(Q->next); Q->next=P; } Εφαρμογή της διαδικασίας στη λίστα της διαφάνειας 14 έχει σαν αποτέλεσμα: Υπόθεση: Η λίστα έχει περισσότερα από 1 στοιχεία. Α Β Γ Δ Cycle ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Κυκλικές Απλά Συνδεδεμένες Λίστες Εισαγωγές μπορούν να γίνουν και στα δύο άκρα σε χρόνο Ο(1):   insertfront (key x, CLIST *Cycle){ Q = (NODE *)malloc(sizeof(NODE)); Q->data = x; Q->next = (Cycle->back)->next; (Cycle->back)->next = Q } Μετά από την διαδικασία insertfront(E, Cycle) η λίστα της διαφάνειας 15 έχει ως εξής: Υπόθεση: Η λίστα έχει τουλάχιστον 1 στοιχείο. Β Γ Δ E Cycle ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Κυκλικές Απλά Συνδεδεμένες Λίστες insertback ( key x, CLIST *Cycle){ Q = (NODE *)malloc(sizeof(NODE)); Q->data = x; Q->next = (Cycle->back)->next; (Cycle->back)->next = Q Cycle->back = Q }   Μετά από την διαδικασία insertback(E, Cycle) η λίστα της διαφάνειας 15 έχει ως εξής: Υπόθεση: Η λίστα έχει τουλάχιστον 1 στοιχείο. Β Γ Δ E Cycle ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Κυκλικές Απλά Συνδεδεμένες Λίστες Υπάρχει η εξής ασυνέχεια σε κυκλικά συνδεδεμένες λίστες ενώ η μη-κενή λίστα δεν έχει καμιά μηδενική τιμή συνδέσμων, η κενή λίστα παριστάνεται από ένα μηδενικό σύνδεσμο. Αυτή η ασυνέχεια προκαλεί πρόσθετους ελέγχους στις διάφορες χρήσιμες πράξεις. Για να επιτύχουμε ομοιομορφία μεταξύ των δυο ειδών λίστας μπορούμε να εισαγάγουμε κόμβους κεφαλής, δηλαδή κόμβους που δεν περιέχουν πληροφορίες. Για παράδειγμα η άδεια ουρά δίνεται ως   ενώ η ουρά στην αρχή της διαφάνειας 14 υλοποιείται ως Cycle Β Γ Cycle Δ ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Κυκλικές Διπλά Συνδεδεμένες Λίστες Κυκλική λίστα της οποίας ο κάθε κόμβος δείχνει και στον επόμενο και στον προηγούμενο. DLL 42 4 54 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Τεχνικές Μείωσης Χώρου Οι διπλά συνδεδεμένες λίστες έχουν το μειονέκτημα πως απαιτούν την ύπαρξη δύο πεδίων δεικτών σε κάθε κόμβο. Πολλές από τις αποθηκευμένες πληροφορίες επαναλαμβάνονται κάθε δείκτης αποθηκεύεται σε δυο κόμβους, τον επόμενο και τον προηγούμενο με αποτέλεσμα τη σπατάλη χώρου. Μπορούμε να συμπτύξουμε σε ένα πεδίο τύπου δείκτη τις διευθύνσεις και του επόμενου και του προηγουμένου κόμβου  ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Τεχνικές Μείωσης Χώρου Ορισμός (Exclusive or) a  b = 0  a = b, δηλ. Aν a1a2…an, b1b2…bn είναι συμβολοσειρές και ai  bi = ci τότε ορίζουμε Ιδιότητες του Exclusive-or ab=ba  a(bc) = (ab)c aa = 0 a0 = a a b a  b 1 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Τεχνικές Μείωσης Χώρου Μέθοδος μείωσης χώρου Θεωρούμε ότι κάθε κόμβος της λίστας αποτελείται από δύο πεδία: το πεδίο data για αποθήκευση δεδομένων και το πεδίο Link που περιέχει ένα pointer. Ας υποθέσουμε πως η λίστα χρησιμοποιείται για την αποθήκευση n δεδομένων. Έστω ότι η διεύθυνση του κόμβου που περιέχει το i-οστό δεδομένο είναι η Μi. Θεωρούμε επίσης δύο επιπλέον κόμβους με διευθύνσεις Mn+1 και Μn+2. Για κάθε κόμβο, το πεδίο Link περιέχει το exclusive-or δύο διευθύνσεων: της διεύθυνσης του κόμβου που προηγείται και της διεύθυνσης αυτού που ακολουθεί. Δηλαδή Για τη διέλευση της λίστας απαιτούνται δύο δείκτες A, B, οι οποίοι να δείχνουν πάντοτε σε δυο διαδοχικούς κόμβους. Αρχικά οι A,B, δείχνουν στους κόμβους Mn+1 και Μn+2.  ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Τεχνικές Μείωσης Χώρου Ο επόμενος κόμβος δίνεται από το ALink(B), και ο προηγούμενος κόμβος από το Link(A)  B. Μ1 Μ4 γ Μ2 Μ4 β Μ1 Μ3 α Μ5 Μ2 Μ5 Μ3 Μ1 Μ2 Μ3 Μ4 Μ5 B A π.χ. A  Link(B) =M4M1M4= M1 Link(A)  B = M5  M5  M3 = M3 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι