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

Σχετικά έγγραφα
Οντοκεντρικός Προγραμματισμός

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα

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

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

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

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

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

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

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

Συστήματα Πληροφοριών Διοίκησης Ενότητα 4: Οργάνωση δεδομένων

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

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

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

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

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

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

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

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

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

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

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

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

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

Transcript:

Δομές δεδομένων Πίνακες Οι πίνακες είναι το πιο απλό «μέσο» αποθήκευσης ομοειδούς πληροφορίας. Χρησιμοποιούν ακριβώς όση μνήμη χρειάζεται για την αποθήκευση της πληροφορίας Επιτρέπουν την προσπέλαση άμεσα στο στοιχείο, άρα και τη γρήγορη αναζήτηση όταν ο πίνακας είναι ταξινομημένος Μπορούν να έχουν πολλές διαστάσεις με τρόπο κοντινό στο πως έχουμε συνηθίσει να σκεφτόμαστε Απαιτούν χρονοβόρα διαδικασία για να αλλάξει το μέγεθος τους (χρήση ου πίνακα και αντιγραφή του ου ) Απαιτούν χρονοβόρα διαδικασία για να εισαχθεί ή διαγραφεί ένα στοιχείο στη «μέση» του πίνακα Λίστες Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες Έχουν αόριστο μήκος Χρησιμοποιούν πρόσθετη μνήμη για τη «σύνδεση» των στοιχείων μεταξύ τους Η προσπέλασή τους γίνεται σειριακά, από την αρχή (κεφαλή) ή/και από το τέλος (ουρά). Η εισαγωγή ή η διαγραφή ενός στοιχείου είναι πολύ απλή(=γρήγορη) διαδικασία Τα στοιχεία τους δεν απαιτείται να είναι συνεχόμενα στη μνήμη Μπορεί να είναι κυκλικές, δηλαδή το επόμενο στοιχείο από το τελευταίο τους να είναι το ο Απλά Συνδεδεμένες Λίστες Wikipedia: http://en.wikipedia.org/wiki/linked structure Υπόδειγμα Υλοποίησης σε C Ο κόμβος είναι: struct node { int val; struct node *next; ; Και η ίδια η λίστα, είναι πολύ απλά: struct node *head; ή struct node *list; Διπλά Συνδεδεμένες Λίστες Wikipedia: http://en.wikipedia.org/wiki/doubly_linked_list

Εδώ ο δείκτης δείχνει το στοιχείο, όχι το «τέλος» του, απεικονίζεται έτσι για απλότητα. Tail Ενδεικτικός κώδικας Εισαγωγή και διαγραφή στοιχείου από διπλά συνδεδεμένη λίστα. void remove(struct node_t *node) { Tail void insertafter(struct note_t *newnode, struct node_t *existing) { newnode>next = existing>next; newnode>prev = existing; if (existing>next!= NULL) { existing>next>prev = newnode; existing>next = newnode; if (node>prev!= NULL) { node>prev>next = node>next; if (node>next!= NULL) { node>next>prev = node>prev; node>next = node>prev = NULL; Εφαρμογές Στοίβα Stack Wikipedia: http://en.wikipedia.org/wiki/stack_(abstract type) Οι στοίβες είναι δομές τύπου LastIn, FirstOut (LIFO) δηλαδή αποθηκεύουμε σε αυτές πληροφορία (με την εντολή push) και την ανακτούμε (με την εντολή pop) με την αντίστροφη σειρά που την αποθηκεύσαμε. Υλοποιείται τόσο με χρήση πινάκων, όσο και με χρήση λιστών. Η χρήση πινάκων φαίνεται να προσφέρει πιο απλή υλοποίηση. Τυπικές της εφαρμογές είναι:. Υπολογισμός (μαθηματικών και όχι μόνο) εκφράσεων και συντακτική ανάλυση. Διαχείριση μνήμης κατά τη λειτουργία λογισμικού ή και του ίδιου του λειτουργικού συστήματος. Ιχνηλασία

4. Λειτουργίες «Αναίρεσης» (Undo). Εκεί η σειρά αναίρεσης είναι η αντίστροφη από τις πράξεις. Ουρές Queues Wikipedia: http://en.wikipedia.org/wiki/queue_(abstract type) Είναι το συμμετρικό της στοίβας. Είναι τύπου FIFO, δηλαδή FirstIn, FirstOut δομή δεδομένων όπου η πληροφορία που εισάγεται σε μια ουρά είναι (με την εντολή enqueue) λαμβάνεται από την ουρά (με την εντολή dequeue) με την ίδια σειρά. Ακριβώς όπως μια ουρά ανθρώπων σε ένα ταμείο μιας πολιτισμένης χώρας. Η χρήση λιστών για την υλοποίηση της ουράς δίνει πιο απλό κώδικα. Τυπικές εφαρμογές είναι:. Λειτουργίες τύπου server όπου εξυπηρετούνται πρώτα όσοι έχουν αιτηθεί πρώτοι.. Ακολουθίες ενεργειών που πρέπει να γίνουν με συγκεκριμένη σειρά πχ μακροεντολές Δένδρα Αποτελούν ιεραρχική οργάνωση δεδομένων. Λύνουν κάποια από τα προβλήματα που παρουσιάζουν οι λίστες ως προς τους πίνακες σε βάρος μιας αυξημένης διαχείρισης. Πάνω στα δένδρα υπάρχει τεράστια θεωρητική ανάλυση στην επιστήμη της Πληροφορικής. root / ρίζα ο επίπεδο 8 ο επίπεδο 9 4 4 ο επίπεδο 4ο επίπεδο 8 leaves / φύλλα Το παραπάνω δένδρο (πάντα σχεδιάζονται με τη ρίζα στο επάνω μέρος) έχει μέγεθος (αριθμό κόμβων) 0 και ύψος 4. Απλά Δένδρα Wikipedia: http://en.wikipedia.org/wiki/tree_(_structure) Δυαδικά Δένδρα Wikipedia: http://en.wikipedia.org/wiki/binary_tree Στα δυαδικά δένδρα ο κάθε κόμβος (node) έχει το πολύ δύο παιδιά.

8 Δυαδικά Δένδρα Αναζήτησης Wikipedia: http://en.wikipedia.org/wiki/binary_search_tree Τα δυαδικά δένδρα αναζήτησης έχουν την εξής ιδιότητα. Σε κάθε κόμβο όλα τα παιδιά του που είναι από τη δεξιά πλευρά έχουν μεγαλύτερες τιμές από τον κόμβο και όλα τα αριστερά μικρότερες. Αυτό επιτρέπει την γρήγορη αναζήτηση τιμών καθώς με αριθμό πράξεων της τάξης του ύψους του δένδρου, φτάνουμε στην επιθυμητή τιμή (εφόσον υπάρχει). Όμως προσοχή χρειάζεται κατά την εισαγωγή ή διαγραφή κόμβων του δένδρου καθώς ανάλογα με τη σειρά εισαγωγής των στοιχείων το δένδρο παίρνει διαφορετικές μορφές. Πχ Κάποιες φορές γίνεται άσκοπα «ψηλό». 8 8 vs Πχ στο αριστερά δένδρο οι τιμές,, μπήκαν με αυτή τη σειρά, ενώ στο δεξιά μπήκαν με τη σειρά,,. Επειδή όσο πιο κοντό είναι ένα δένδρο, τόσο πιο γρήγορα γίνονται αρκετές από τις ενέργειες που θέλουμε να του εφαρμόσουμε, επιδιώκουμε πάντα τα δένδρα να είναι ισορροπημένα/συμμετρικά. Υπάρχουν όμως εφαρμογές όπου θέλουμε το αντίθετο. Για παράδειγμα στο ακόλουθο σχήμα βλέπετε ένα δένδρο που χρησιμοποιείται στη συμπίεση ενός αρχείου. Σε αυτό το παράδειγμα με δεδομένο το δένδρο που βλέπουμε μπορούμε να παραστήσουμε τους αριθμούς,,, με λιγότερα bits. Εάν για παράδειγμα βάζαμε τα δεδομένα σε έναν πίνακα με 4 στοιχεία, θα θέλαμε bits για να παραστήσουμε τον δείκτη με τιμές 0. Όπως βλέπουμε στον πίνακα η τιμή εμφανίζεται 00 φορές ενώ η, 8 φορές. Με συνολικά 40 τιμές θέλουμε 40xbits/(8bits/Byte) = 0, = 0 Bytes.

Εάν όμως χρησιμοποιήσουμε το δένδρο και αντιστοιχίσουμε τις τιμές των bits το 0=δεξιά και το =αριστερά, τότε το παριστάνεται ως, το ως 0, το ως 00 και το ως 000. Αυτό μας επιτρέπει να αποθηκεύσουμε την πληροφορία σε 00x + 80x + x+8x = 0 bits = 67Bytes << 0Bytes που ήθελε η πινακοποιημένη μορφή. 00 0 8 0 00 0 0 0 00 0 0 0 000 8 00 0 Παρόλα αυτά αν προσθέσουμε τη μνήμη που χρειάζεται ο πίνακας ή το δένδρο στην κάθε περίπτωση, τότε ο πίνακας δίνει συνολικά μικρότερο μέγεθος, αλλά καθώς μεγαλώνει το αρχείο ή αυξάνουν οι αντιθέσεις στη στατιστική ανάλυση των τιμών, το δένδρο δίνει κατά πολύ καλύτερα αποτελέσματα από τον πίνακα.