8.6 Κλάσεις και αντικείμενα 8.7 Δείκτες σε γλώσσα μηχανής

Σχετικά έγγραφα
Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

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

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

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

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

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

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Κάθε στοιχείο που γίνεται αντιληπτό με μία από τις πέντε αισθήσεις μας

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

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

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Βασικές Δοµές Δεδοµένων. Σύντοµη επανάληψη (ΕΠΛ 035).

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

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

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

Οι δομές δεδομένων στοίβα και ουρά

Οι δυναμικές δομές δεδομένων στην ΑΕΠΠ

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

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

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

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

3 ΟΥ και 9 ΟΥ ΚΕΦΑΛΑΙΟΥ

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

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

Διάλεξη 11: Δέντρα Ι - Εισαγωγή σε Δενδρικές Δομές Δεδομένων

Πληροφορική 2. Δομές δεδομένων και αρχείων

Διάλεξη 11: Δέντρα Ι Εισαγωγή σε Δενδρικές Δομές Δεδομένων

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

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

Επιµέλεια Θοδωρής Πιερράτος

Ενδεικτικές Ερωτήσεις Θεωρίας

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

Κεφ.11: Ευρετήρια και Κατακερματισμός

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

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

Προγραμματισμός Η/Υ. 4 η ενότητα: Δομές Δεδομένων. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

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

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

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

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

ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΚΕΦΑΛΑΙΟ 3 ΠΡΟΣΘΗΚΗ

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

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

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014


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

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Προγραμματισμός Η/Υ. Δομές Δεδομένων. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο

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

Κεφάλαιο 10 Ψηφιακά Λεξικά

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

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

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

Προγραμματιστική Εργασία Μέρος Β. Δρακωνάκης Κώστας Παπαϊωάννου Αντώνης

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

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

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

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

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

ΗΥ360 Αρχεία και Βάσεις εδοµένων

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

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

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

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

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

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

Α1. Στον προγραµµατισµό χρησιµοποιούνται δοµές δεδοµένων. 1. Τι είναι δυναµική δοµή δεδοµένων; Μονάδες 3 2. Τι είναι στατική δοµή δεδοµένων;

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

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Διαδικασιακός Προγραμματισμός

Εργαστήριο 5. Εαρινό Εξάμηνο

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

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

Θέματα Υπολογισμού στον Πολιτισμό - Δένδρα. Δένδρα

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

ΗΜΥ Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ. Πίνακες και βασικές επεξεργασίες αυτών

ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 05/03/2012 ΑΠΑΝΤΗΣΕΙΣ. ΘΕΜΑ Α Α1. Α2. 1. ΣΩΣΤΟ 1 στ 2. ΛΑΘΟΣ 2 δ 3. ΣΩΣΤΟ 3 ε 4. ΛΑΘΟΣ 4 β 5. ΣΩΣΤΟ 5 γ

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (2)

Φίλη μαθήτρια, φίλε μαθητή,

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗΝ Α.Ε.Π.Π. Γ ΤΕΧΝΟΛΟΓΙΚΗΣ. Όνομα:.. Βαθμός: /100

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

Ορισµοί κεφαλαίου. Σηµαντικά σηµεία κεφαλαίου

Transcript:

ΚΕΦΑΛΑΙΟ 8: Αφαιρετικές έννοιες δεδομένων 8.1 Βασικές έννοιες δομών δεδομένων 8.2 Σχετικές έννοιες 8.3 Υλοποίηση δομών δεδομένων 8.4 Μια σύντομη μελέτη περίπτωσης 8.4 Προσαρμοσμένοι τύποι δεδομένων 8.6 Κλάσεις και αντικείμενα 8.7 Δείκτες σε γλώσσα μηχανής Οι διαφάνειες βασίζονται σε μεγάλο βαθμό σε αυτές που συνοδεύονται με το προτεινόμενο σύγγραμμα, καθώς και στις διαφάνειες προηγούμενων ετών του 1 κ. Κουρκουμπέτη.

Δομές δεδομένων (data structures) Αδόμητα δεδομένα οδός Ζέας 14, οδός Πατησίων 27 Φρύνη Βάρναλη Δομημένα δεδομένα Ιωάννης Βρανάς 47 οδός Ζέας 27 Φρύνη Βάρναλη 14 οδός Σκουφά 56 Ιωσήφ Κούλης 98 Πατησίων 23 56 47, Ιωάννης Βρανάς Ιωσήφ Κούλης 23 οδός Σκουφά Λογική σχέση Φρύνη Βάρναλη 14 οδός... 98, Ιωάννης Βρανάς 47 οδός... Ιωσήφ Κούλης 98 οδός.. 2

Βασικές δομές δεδομένων Ομοιογενής πίνακας (homogeneous array) Περιλαμβάνει ιδίου τύπου δεδομένα Π.χ. Διδιάστατος πίνακας m x n: m γραμμές (rows) n στήλες (columns) Η θέση κάθε στοιχείου αναγνωρίζεται από ένα ζευγάρι δεικτών (i,j), i=1, m, j=1, n Ετερογενής πίνακας (heterogeneous array) Περιλαμβάνει δεδομένα διαφορετικών τύπων Π.χ. Για υπάλληλο: όνομα, ηλικία, κλπ. Λίστα (list) Στοίβα (stack) Ουρά (queue) Δέντρο (tree) 3

Ορολογία λιστών Η λίστα είναι μία συλλογή δεδομένων της οποίας οι καταχωρήσεις έχουν σειριακή διάταξη. Το ένα άκρο μίας λίστας ονομάζεται αρχή (head) της λίστας, ενώ το άλλο άκρο τέλος (tail). Παραδείγματα: διδιάστατος πίνακας μπορεί να θεωρηθεί ως λίστα γραμμών, κείμενο θεωρείται ως λίστα από χαρακτήρες Λίστες επισκεπτών, κλπ. Λίστα: a1, a2, a3,..., a89, nil τέλος λίστας 4

Ορολογία στοιβών Στοίβα είναι μία λίστα της οποίας οι καταχωρήσεις αφαιρούνται και εισάγονται μόνο από την αρχή. Δομή LIFO (Last In, First Out). H αρχή μίας στοίβας ονομάζεται κορυφή (top) της στοίβας, ενώ το τέλος ονομάζεται βάση (base). Απώθηση (pop) ονομάζεται η αφαίρεση μίας καταχώρησης από την κορυφή. Ώθηση (push) είναι η εισαγωγή μίας νέας καταχώρησης στην κορυφή Χρήσιμη για περιπτώσεις όπου αντικείμενα ανακτούνται με σειρά αντίστροφη από αυτήν με την οποία εισάγονται π.χ. Διαδοχικές κλήσεις μιας διεργασίας σε μια αναδρομή a1 a2 a3 Στοίβα 5

Ορολογία ουρών Η ουρά είναι μία λίστα στην οποία οι καταχωρήσεις αφαιρούνται από την αρχή ενώ οι νέες καταχωρήσεις προστίθενται στο τέλος. Δομή FIFO (First In, First Out). Χρήσιμες ως δομή προσωρινής μνήμης (buffer) όπου αποθηκεύονται δεδομένα μέχρι να μεταφερθούν από μια θέση σε μια άλλη Ουρά: Είσοδος a1 a2 a3 Έξοδος 6

Δέντρα: Παράδειγμα οργανογράμματος 7

Ορολογία δέντρων (1) Ένα δέντρο είναι μία ομάδα δεδομένων της οποίας οι καταχωρίσεις έχουν μία ιεραρχική οργάνωση. Κόμβος (node) είναι η κάθε θέση σε ένα δέντρο. Κόμβος ρίζα (root node) είναι ο κόμβος στην κορυφή. Τερματικός κόμβος (terminal node) ή φύλλο (leaf) είναι ο κόμβος που βρίσκεται στο κάτω μέρος Ως βάθος (depth) ορίζουμε το πλήθος των κόμβων που βρίσκονται στη μεγαλύτερη διαδρομή από τη ρίζα μέχρι ένα φύλλο. 8

Ορολογία δένδρων: κόμβοι Γονικός κόμβος (γονέας) (parent) ονομάζεται ο αμέσως επάνω κόμβος ενός συγκεκριμένου κόμβου. Θυγατρικός κόμβος (παιδί) (child) είναι ο αμέσως από κάτω κόμβος ενός συγκεκριμένου κόμβου. Πρόγονος (ancestor) είναι ο γονέας, ο γονέας του γονέα κτλ. Απόγονος (descendant) είναι το παιδί, το παιδί του παιδιού κτλ. Αμφιθαλείς (ή κόμβοι αδέρφια) (siblings) είναι δύο κόμβοι με τους ίδιους γονείς. Δυαδικό δένδρο (binary tree) είναι ένα δένδρο στο οποίο κάθε κόμβος έχει μέχρι δύο θυγατρικούς κόμβους. Έχουμε επίσης τριαδικά δέντρα (ternary trees), κλπ 9

Ορολογία δέντρων Ένα υποδέντρο με κορυφή κάποιο κόμβο καλείται και κλαδί (branch) από αυτόν τον κόμβο/ 10

Η φύση των δομών δεδομένων H μνήμη είναι οργανωμένη ως μια σειρά από διευθυνσιοδοτημένα κελιά Οι δομές δεδομένων (data structures) (πίνακες, λίστες, στοίβες, ουρές, δέντρα) είναι αφαιρετικά (abstract) εργαλεία προς διευκόλυνση των χρηστών που τα χρησιμοποιούν Καλύτερη οργάνωση δεδομένων Στατική (static) είναι η δομή δεδομένων της οποίας το μέγεθος δεν αλλάζει. Ποιο εύκολη διαχείριση, απλά χρειάζεται ένας τρόπος για την πρόσβαση σε αυτά και για αλλάζουμε την τιμή τους Δυναμική (dynamic) είναι η δομή της οποίας το μέγεθος μπορεί να αλλάξει. Πρέπει να ρυθμίσουμε την εισαγωγή και διαγραφή δεδομένων και την εύρεση μνήμης για την αύξηση του μεγέθους της δομής 11

Δείκτες Τα κελιά μνήμης αναγνωρίζονται από τις διευθύνσεις τους Ως αριθμοί, οι διευθύνσεις μπορεί να αποθηκευτούν σε κελιά μνήμης Δείκτης (Pointer): ένας αποθηκευτικός χώρος σε κάποια θέση μνήμης που περιλαμβάνει μια άλλη θέση μνήμης Π.χ. Ο Program counter (μετρητής προγράμματος) έχει την διεύθυνση της επόμενης εντολής προς εκτέλεση Διασύνδεση ομοειδών δεδομένων (π.χ. μυθιστορήματα από τον ίδιο συγγραφέα) Επιπλέον μνήμη για κάθε δεδομένο (μυθιστόρημα), τη χρησιμοποιώ για να αποθηκεύσω την διεύθυνση του επόμενου μυθιστορήματος στην μνήμη Εύκολη εύρεση όλων των ομοειδών δεδομένων 12

Αποθήκευση πινάκων Αποθήκευση μονοδιάστατου πίνακα σε διαδοχικά κελιά μνήμης Readings[i]: το i-οστό στοιχείο tου μονοδιάστατου πίνακα Readings int Readings[24]; Σημαίνει δήλωση ενός μονοδιάστατου πίνακα 24 στοιχείων {Διεύθυνση του Readings[i]} = {Διεύθυνση του Readings[1]} + (i-1) 13

Αποθήκευση ομοιογενών πινάκων Πίνακας (array): 2 γραμμές, 3 στήλες a11 a12 a13 a21 a22 a23 Απαιτεί ένα επαρκές τμήμα από συνεχόμενα κελιά μνήμης για να αποθηκεύσει όλα τα δεδομένα. Δισδιάστατοι πίνακες Διάταξη κατά γραμμές (row major order) όπου κάθε γραμμή του πίνακα αποθηκεύεται μαζί. Πολυώνυμο διεύθυνσης: A[r,c] = (r-1)(# columns) + c Διάταξη κατά στήλες (column major order) στην οποία ο πίνακας αποθηκεύεται στήλη προς στήλη. Σημ. Στην C, Java όπου η αρίθμηση ξεκινά από το στοιχείο [0][0], έχουμε πολυώνυμο A[r,c] = (r-1)(# columns) + (c-1) 14

Διάταξη πίνακα στην μνήμη κατά γραμμές int Sales[4,5] Χρήση πολυωνύμου διεύθυνσης για εντοπισμό / πρόσβαση / αλλαγή τιμής σε συγκεκριμένο στοιχείο Πολυώνυμο διεύθυνσης: A[r,c] = (r-1)(# columns) + c ή A[r,c] = (r-1)(# columns) + (c-1) 15 (δείτε προηγ. Διαφάνεια)

Αποθήκευση ετερογενούς πίνακα 25 θέσεις μνήμης για 25 χαρακτήρες στο όνομα, 1 θέση μνήμης για την ηλικία και 1 για το Rating 3 θέσεις μνήμης, 1 θέση για 1 pointer που δείχνει σε μια συνιστώσα (όνομα, ηλικία, rating). Χρήσιμη αναπαράσταση, μπορεί δυναμικά να αλλάζει το μήκος του ονόματος. 16

Αποθήκευση λιστών Συνεχόμενη λίστα (contiguous list): είναι η λίστα που αποθηκεύεται σε έναν ομοιογενή πίνακα. Τα στοιχεία της αποθηκεύονται διαδοχικά το ένα μετά το άλλο Συνολικά καταλαμβάνουν ένα μεγάλο μπλοκ μνήμης Χρήσιμη για στατική λίστα, όχι χρήσιμη για δυναμική λίστα (όπου συμβαίνουν προσθήκες, αφαιρέσεις στοιχείων) Συνδεδεμένη λίστα (linked list): είναι η λίστα στην οποία κάθε κόμβος δείχνει στον επόμενο του, με δείκτες (pointers) Δείκτης αρχής είναι ο δείκτης που δείχνει στη αρχή, ή την κεφαλή, της λίστας. Δείκτης ΝΙL είναι ένα ειδικό σχήμα bit που τοποθετείται στο κελί δείκτη της τελευταίας καταχώρισης για να προσδιορίσει ότι δεν υπάρχουν άλλες καταχωρίσεις στη λίστα. 17

Συνεχόμενη λίστα 18

Η δομή μιας συνδεδεμένης λίστας (π.χ.) 8 κελιά μνήμης για το όνομα, 1 κελί για τον Pointer (διεύθυνση του επόμενου στοιχείου στη λίστα) Κινούμαι από στοιχείο σε στοιχείο της λίστας ακολουθώντας τον δείκτη. Τα στοιχεία είναι αποθηκευμένα διάσπαρτα μέσα στη μνήμη 19

Διαγραφή καταχώρισης από συνδεδεμένη λίστα Aλλαγή pointer, ώστε να δείχνει στο επόμενο στοιχείο από αυτό προς διαγραφή. 20

Προσθήκη καταχώρισης σε συνδεδεμένη λίστα Pointer της νέας καταχώρησης δείχνει στο επόμενο στοιχείο. Pointer της προηγούμενης Καταχώρησης από την νέα δείχνει στη νέα καταχώρηση. 21

Μια διαδικασία για την εκτύπωση μιας συνδεδεμένης λίστας διαδικασία PrintList(Λίστα) ΤρέχωνΔείκτης δείκτης κεφαλής της Λίστας όσο (ΤρέχωνΔείκτης διάφορος του NIL) κάνε (Τύπωσε το όνομα της καταχώρισης στην οποία δείχνει ο ΤρέχωνΔείκτης. Βρες την τιμή στο κελί δείκτη της καταχώρισης της Λίστας όπου δείχνει ο ΤρέχωνΔείκτης και ανάθεσε εκ νέου τον ΤρέχονταΔείκτη την τιμή αυτή.) 22

Αποθήκευση στοιβών Δέσμευση ενός μέρους μνήμης για την στοίβα Η απόφαση για το ποσό της μνήμης που θα δεσμευτεί είναι σημαντική Μικρός χώρος: κίνδυνος να εξαντληθεί Μεγάλος χώρος: σπατάληση πόρων αν δεν υπάρχουν τελικά αρκετά δεδομένα προς αποθήκευση Δείκτης στοίβας (stack pointer): διεύθυνση της κορυφής της στοίβας, αποθεκεύεται σε μια διεύθυνση Push: ο pointer μετακινείται στο κενό δεξιά από την τωρινή θέση του και το νέο στοιχείο εισάγεται Pop: o pointer μετακινείται στο στοιχείο αριστερά από την τωρινή θέση του, και το στοιχείο βγαίνει από τη στοίβα 23

Αποθήκευση Ουρών Συνεχές μπλοκ μνήμης, δείκτης αρχής (head pointer), δείκτης τέλους (tail pointer) Μια υλοποίηση ουράς με δείκτες αρχής και τέλους. Παρατηρήστε το πώς «γλιστράει» στη μνήμη η ουρά καθώς προστίθενται και αφαιρούνται καταχωρήσεις 24

Αποθήκευση ουρών (2) Εισαγωγή νέου στοιχείου στη θέση που δείχνει ο δείκτης τέλους (ο οποίος μετά την εισαγωγή μετακινείται στην επόμενη θέση) Εξαγωγή στοιχείου από τη θέση που δείχνει ο δείκτης αρχής (ο οποίος μετά την εξαγωγή μετακινείται στην επόμενη θέση) Η κυκλική ουρά είναι ένας ομογενής πίνακας όπου η πρώτη καταχώριση στον πίνακα συμπεριφέρεται σαν να είναι η αμέσως επόμενη της τελευταίας καταχώρισης. Προστατεύει την ουρά από το να γλιστράει εκτός του τμήματος μνήμης που έχει δεσμευτεί για αυτή. 25

Μια κυκλική ουρά 26

Αποθήκευση Δυαδικών Δέντρων σε συνεχές τμήμα μνήμης Κόμβος Θέσεις (κελιά) μνήμης για: δεδομένα + Δείκτης στον αριστερό θυγατρικό κόμβο + Δείκτης στον δεξιό θυγατρικό κόμβο 27

Αποθήκευση Δέντρου σε συνεχές τμήμα μνήμης Οι κόμβοι (δεδομένα, χωρίς τους δείκτες) αποθηκεύονται σειριακά στην μνήμη, επίπεδο προς επίπεδο, από αριστερά προς τα δεξιά και από πάνω προς τα κάτω Οι θυγατρικοί κόμβοι του κόμβου στην θέση μνήμης n αποθηκεύονται στις θέσεις 2n και 2n+1 Ο γονέας ενός κόμβου στη θέση μνήμης n είναι στην θέση n div 2 O αδερφός κόμβος ενός κόμβου στη θέση n είναι στην θέση n+1 αν n άρτιος ή στη θέση 28 n-1 αν n περιττός

Αναποδοτικότητα στην αποθήκευση δέντρου σε συνεχές τμήμα μνήμης Αραιό (sparse) και μη ισορροπημένο δέντρο: όχι αποδοτικός ο τρόπος αποθήκευσής του σε συνεχές τμήμα μνήμης 29

Αποκομιδή Απορριμάτων Καθώς οι δυναμικές δομές δεδομένων αναπτύσσονται και συρρικνώνονται: ελεύθερος αποθηκευτικός χώρος καταλαμβάνεται από δεδομένα που εισάγονται στη λίστα ή κατειλλημένος αποθηκευτικός χώρος απελευθερώνεται από τα δεδομένα όταν αυτά αφαιρούνται από την λίστα Αποκομιδή απορριμμάτων (garbage collection): η συλλογή αχρησιμοποίητου αποθηκευτικού χώρου για μελλοντική χρήση Ο διαχειριστής μνήμης χρειάζεται να κάνει αποκομιδή απορριμάτων καθώς αναθέτει και επανακτά θέσεις μνήμης Χρειάζεται προσοχή να μην χαθούν κατά λάθος δεδομένα (π.χ. μπορεί κάποιος δείκτης να δείχνει σε μια θέση μνήμης που αποφασίζεται να χρησιμοποιηθεί για άλλα δεδομένα) Υπερχείλιση μνήμης (memory leak): η κατάσταση όταν δεν γίνεται η ανάκτηση της μνήμης που απελευθερώνεται 30

Ορισμός δομής Case study: δημιουργία μιας αφηρημένης δομής Δεδομένα: ονόματα (λίστα ονομάτων) σε αλφαβητική σειρά Μέθοδοι χειρισμού δεδομένων: αναζήτηση, εκτύπωση, εισαγωγή νέας καταχώρησης Υλοποίηση δομής Υλοποίηση στην μνήμη Αλγόριθμοι 31

Αναδρομική στρατηγική (Δυαδική Αναζήτηση) για αναζήτηση της καταχώρισης Κώστας σε μια ταξινομημένη λίστα Είσοδος: Μια λίστα που είναι ταξινομημένη αλφαβητικά 32

Αναζήτηση σε λίστα που είναι αποθηκευμένη ως δυαδικό δέντρο Παρατήρηση: για να αναζητήσω ένα στοιχείο σε μια λίστα διατρέχω διαδοχικά τα μέσα κατάλληλα επιλεγμένων υπολιστών Της πάνω ή της κάτω υπο-λίστας σε σχέση με ένα στοιχείο Αποθηκεύω τα μέσα των υπο-λιστών αυτών ως παιδιά του στοιχείου Π.χ. Στην παραπάνω λίστα Θανάσης Δημήτρης Μανώλης Βασίλης Ζωή Κώστας Ξένια 33

Παράδειγμα αποθήκευσης δυαδικού δέντρου Ο τρόπος που είναι αποθηκευμένο το δέντρο διευκολύνει την αποδοτική αναζήτηση Δυαδική αναζήτηση στην λίστα Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν Το μέσον της λίστας αποθηκεύεται στην ρίζα του δέντρου (Η) Το μέσον της πάνω υπο-λίστας του Η (Δ) αποθηκεύεται ως το αριστερό παιδί του Η Το μέσον της κάτω υπο-λίστας του Η (Λ) αποθηκεύεται ως το δεξιό παιδί του Η κοκ 34

Η δυαδική αναζήτηση με τη μορφή αν η λίστα είχε υλοποιηθεί ως συνδεδεμένο δυαδικό δέντρο διαδικασία Αναζήτηση (Δέντρο, ΤιμήΣτόχος) αν (δείκτης ρίζας Δέντρου = NIL) τότε (δήλωσε την αναζήτηση ως ανεπιτυχή) αλλιώς (εκτέλεσε το τμήμα των παρακάτω εντολών που σχετίζεται με την κατάλληλη περίπτωση) περίπτωση 1: ΤιμήΣτόχος = τιμή κόμβου ρίζας (Ανάφερε ότι η αναζήτηση πέτυχε) περίπτωση 2: ΤιμήΣτόχος < τιμή κόμβου ρίζας (Εφάρμοσε τη διαδικασία Αναζήτησης για να δεις αν η ΤιμήΣτόχος βρίσκεται στο υποδέντρο που προσδιορίζεται από τον αριστερό θυγατρικό κόμβο της ρίζας, και ανάφερε το αποτέλεσμα αυτής της αναζήτησης) περίπτωση 3: ΤιμηΣτόχος > τιμή κόμβου ρίζας (Εφάρμοσε τη διαδικασία Αναζήτησης για να δεις αν η ΤιμήΣτόχος βρίσκεται στο υποδέντρο που προσδιορίζεται από τον δεξιό θυγατρικό κόμβο της ρίζας, και ανάφερε το αποτέλεσμα αυτής της αναζήτησης) ) τέλος αν 35

Σχηματική Αναπαράσταση αναζήτησης σε Λίστες που είναι αποθηκευμένες ως Δέντρα Αναζήτηση σε διαδοχικά μικρότερα υπο-δέντρα 36

Εκτύπωση ενός δέντρου αναζήτησης σε αλφαβητική σειρά Αναδρομική διαδικασία 37

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

Παράδειγμα: Εισαγωγή της καταχώρισης Ν στη λίστα Β,Ε,Η,Θ,Κ,Λ,Ο,Ρ που έχει αποθηκευτεί ως δέντρο Εισαγωγή της καταχώρισης Ν στη λίστα Β,Ε,Η,Θ,Κ,Λ,Ο,Ρ που έχει ήδη αποθηκευτεί ως δέντρο + Ν Η καταχώριση εισάγεται στη θέση που θα κατείχε Αν υπήρχε στην λίστα (οπότε και θα είχε ανακαλυφθεί από τον αλγόρθμο δυαδικής Αναζήτησης) 39

Διαδικασία για την εισαγωγή μιας νέας καταχώρισης σε μία λίστα που είναι αποθηκευμένη ως δυαδικό δέντρο διαδικασία Εισαγωγή (Δέντρο, ΝέαΤιμή) αν (δείκτης ρίζα Δέντρου = NIL) (όρισε το δείκτη ρίζας ώστε να δείχνει σε ένα νέο φύλλο που περιέχει τη ΝέαΤιμή) αλλιώς (εκτέλεσε το τμήμα των εντολών παρακάτω που σχετίζεται με την κατάλληλη περίπτωση) περίπτωση 1: ΝέαΤιμή = τιμή ριζικού κόμβου (Μην κάνεις τίποτα) περίπτωση 2: ΝέαΤιμή < τιμή ριζικού κόμβου (αν (αριστερός θυγατρικός δείκτης του ριζικού κόμβου = NIL) τότε (όρισε το δείκτη αυτόν ώστε να δείχνει σε ένα νέο κόμβο φύλλο που περιέχει τη ΝέαΤιμή) αλλιώς (εφάρμοσε τη διαδικασία Εισαγωγή για την εισαγωγή της ΝέαςΤιμής στο υποδέντρο που προσδιορίζεται από τον αριστερό θυγατρικό δείκτη) περίπτωση 3:ΝέαΤιμή > τιμή ριζικού κόμβου (αν (δεξιός θυγατρικός δείκτης του ριζικού κόμβου = NIL) τότε (όρισε το δείκτη αυτόν ώστε να δείχνει σε ένα νέο κόμβο φύλλο που περιέχει τη ΝέαΤιμή) αλλιώς (εφάρμοσε τη διαδικασία Εισαγωγή για την εισαγωγή της ΝέαςΤιμής στο υποδέντρο που προσδιορίζεται από τον δεξιό θυγατρικό δείκτη) ) ) τέλος αν 40

Προσαρμοσμένοι (customized) τύποι δεδομένων Τύποι δεδομένων οριζόμενοι από το χρήστη (user-defined data types) αποτελούν ένα πρότυπο για μία ετερογενή δομή. Επιτρέπουν στον χρήστη να ορίσει δικούς του τύπους δεδομένους Συχνά εμφανίζονται ως συλλογές βασικών τύπων δεδομένων Δηλώσεις: Τύπος EmployeeType, εκδοχές (instances) Employee1, DistManager, SalesRep1, SalesRep2 41

Αφηρημένοι τύποι δεδομένων Αφηρημένοι τύποι δεδομένων (abstract data types) είναι ορισμένοι από το χρήστη τύποι δεδομένων που περιέχουν ορισμούς λειτουργιών και πράξεων Π.χ. διαδικασίες για προσπέλαση και χειρισμό Δηλ. Επιπλέον των τύπων δεδομένων οριζόμενων από το χρήστη, έχουμε και διαδικασίες που ορίζονται Παράδειγμα: τύπος δεδομένων ορισμένος από το χρήστη Δήλωση: Διαδικασίες του στυλ δεν μπορούν να εκτελεστούν γιατί δεν τις έχουμε ορίσει 42

Αφηρημένοι τύποι δεδομένων (2) Παράδειγμα: Αφηρημένοι τύποι δεδομένων Τώρα μπορεί να κληθεί η διαδικασία: 43

Κλάσεις και Αντικείμενα Κλάση (class): Ένας αφηρημένος τύπος δεδομένων με πρόσθετες λειτουργίες Τα χαρακτηριστικά μπορούν να κληρονομηθούν Τα περιεχόμενα μπορούν να ενθυλακωθούν μέθοδοι κατασκευής για απόδοση αρχικών τιμών σε νέα αντικείμενα Δηλώσεις: 44

Μια υλοποίηση δεικτών σε γλώσσα μηχανής D R X Y : φόρτωσε τον καταχωρητή R με το περιεχόμενο της μνήμης η διεύθυνση της οποίας Βρίσκεται στην διεύθυνση X Y 45

Μια 2 η υλοποίηση δεικτών σε γλώσσα μηχανής Κωδικός εντολής Ε R 0 S : φόρτωσε τον καταχωρητή R με το περιεχόμενο της μνήμης η διεύθυνση της οποίας βρίσκεται στον καταχωρητή S 46