Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Κεφάλαιο 3ο Δομές Δεδομένων.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Κεφάλαιο 3ο Δομές Δεδομένων."— Μεταγράφημα παρουσίασης:

1 Κεφάλαιο 3ο Δομές Δεδομένων

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

3 Βασικές κατηγορίες δομών δεδομένων
Στατικές δομές: Τα στοιχεία του αποθηκεύονται σε συνεχόμενες θέσεις μνήμης. Έχουν σταθερό μέγεθος στην διάρκεια εκτέλεσης του προγράμματος. Π.χ. πίνακες Δυναμικές δομές: Τα στοιχεία τους δεν αποθηκεύονται σε συνεχόμενες θέσεις μνήμης. Δεν έχουν σταθερό μέγεθος στην διάρκεια εκτέλεσης του προγράμματος. Η τεχνική με την οποία γίνεται η τοποθέτηση των στοιχείων μιας δυναμικής δομής στην μνήμη ονομάζεται «δυναμική παραχώρηση μνήμης» Π.χ. δένδρα, λίστες

4 Υπάρχει μεγάλη εξάρτηση μεταξύ δομής δεδομένων και του αλγορίθμου που την επεξεργάζεται και μάλιστα το πρόγραμμα πρέπει να τα θεωρεί ως αδιάσπαστη ενότητα: Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα

5 Πίνακες Πίνακας είναι μια στατική δομή δεδομένων που αποτελείται αποκλειστικά από αντικείμενα του ίδιου τύπου, τα οποία αναφέρονται με ένα κοινό όνομα. Κάθε αντικείμενο του πίνακα ονομάζεται στοιχέιο. Πότε χρειάζονται; Όταν πρέπει να γίνει πολλαπλή επεξεργασία των ίδιων δεδομένων Π.χ. αν πρέπει να βρώ τον μέσο όρο 100 αριθμών και μετά να υπολογίσω πόσοι από αυτούς ξεπερνούν τον μέσο όρο δεν θα ζητήσω από τον χρήστη να πληκτρολογήσει δυο φορές του 100 αριθμούς, αλλά θα τους αποθηκεύσω σε έναν πίνακα Α[100] προκειμένου να τους χειριστώ δυο φορές, μια για να υπολογίσω το μέσο όρο και μια για να τους συγκρίνω με τον μέσο όρο που υπολόγισα.

6 Επιπλέον στοιχεία για τους πινακες
Μειονεκτήματα: απαιτούν μνήμη, καθώς δεσμεύουν πολλές θέσεις ανάλογα με το μέγεθός τους και περιορίζουν τις δυνατότητες του προγράμματος καθώς το μέγεθος δεν μεταβάλλεται. Διαστάσεις: Ένας πίνακας μπορεί να είναι μονοδιάστατος, π.χ. Α[10], δισδιάστατος, π.χ. Β[5,6], και γενικά ν-διάστατος, π.χ. Π[α1,α2,…,αν] Πλήθος στοιχείων: Όσο και το γινόμενο των διαστάσεών του. Π.χ. ο Β[5,6] αποτελείται από 5*6=30 στοιχεία. Ονοματολογία: ακολουθεί τους κανόνες που ισχύουν για τις μεταβλητές και ακολουθούν οι αγκύλες που περιέχουν είτε ακέραιους αριθμούς είτε ακέραιες εκφράσεις. Προσοχή!!! Στην ψευδογλώσσα, το μέγεθος του πίνακα δεν δηλώνεται, ενώ στην ΓΛΩΣΣΑ δηλώνεται στο τμήμα των μεταβλητών. Οπουδήποτε αλλού εμφανίζεται ο πίνακας, δηλώνει στοιχείο του και όχι το μέγεθός του.

7 Προσπέλαση σε πίνακα Μπορεί να γίνει σε μεμονωμένα στοιχεία του πίνακα ή μαζικά μέσω μιας δομής επανάληψης. Π.χ. Αλγόριθμος π_χ Δεδομένα // Α // Εκτύπωσε Α[3] …… Αλγόριθμος π_χ Δεδομένα // Α // Για i από 1 μέχρι Εκτύπωσε Α[i] Τέλος_επανάληψης ……. Προσοχή!!! Θα πρέπει σε κάθε περίπτωση να φροντίζουμε ώστε να μην ξεπερνάμε τα όρια των δεικτών.

8 Μονοδιάστατοι πίνακες
Άθροισμα στοιχείων του πίνακα: Έστω Α[Ν] ένας πίνακας αριθμών. Το διπλανό απόσπασμα υπολογίζει το άθροισμα των στοιχείων του. Διαιρώντας με το μέγεθος Ν του πίνακα έχουμε τον μέσο όρο των στοιχείων του. Υπολογισμός μέγιστου: Έστω Α[Ν] ένας πίνακας αριθμός. Το διπλανό απόσπασμα υπολογίζει την μέγιστη τιμή των στοιχείων του Εάν οι τιμές του πίνακα έχουν μια ελάχιστη τιμή π.χ. είναι βαθμοί μεγαλύτεροι ή ίσοι του μηδενός, τότε το max μπορεί να αρχικοποιηθεί με μια τιμή μικρότερη από την ελάχιστη δυνατή, π.χ. με το -1. Σ<-0 Για κ από 1 μέχρι Ν Σ<-Σ+Α[κ] Τέλος_επανάληψης max <- A[1] Για κ από 1 μέχρι Ν Αν Α[κ]>max τότε max<-Α]κ] Τέλο_αν Τέλος_επανάληψης max <- -1 Για κ από 1 μέχρι Ν Αν Α[κ]>max τότε max<-Α]κ] Τέλο_αν Τέλος_επανάληψης

9 Μονοδιάστατοι πίνακες
Εύρεση θέσης ΜΟΝΑΔΙΚΟΥ μέγιστου: Έστω πίνακας Α[Ν]. Το παρακάτω απόσπασμα υπολογίζει την θέση του στοιχείου του πίνακα με την μέγιστη τιμή, όταν αυτό είναι μοναδικό, αποθηκεύοντάς την στην μεταβλητή θέση. μεγ<-Α[1] θέση<-1 Για κ από 1 μέχρι Ν Αν Α[κ]>μεγ τότε μεγ<-Α[κ] θέση<-κ Τέλος_αν Τέλος_επανάληψης

10 Μονοδιάστατοι πίνακες
max<- Β[1] θέση<-1 Για κ από 1 μέχρι Ν Αν Β[κ]> max τότε max<-Β[κ] θέση<-κ Τέλος_αν Τέλος_επανάληψης Εμφάνισε Ο[θέση] max<-Α[1] Για κ από 1 μέχρι Ν Αν Α[κ]> max τότε max<-Α[κ] Τέλος_αν Τέλος_επανάληψης Για κ από 1 μέχρι Ν Αν Α[κ]= max τότε Εμφάνισε κ Τέλος_αν Τέλος_επανάληψης Παράλληλοι πίνακες: Έστω Ο[Ν] πίνακας με ονόματα μαθητών και Β[Ν] πίνακας με τους βαθμούς τους. Το διπλανό απόσπασμα δίνει το όνομα του μαθητή με τον καλύτερο βαθμό. Εμφάνιση όλων των θέσεων μεγίστου: Έστω Α[Ν] ένας πίνακας αριθμών. Στο διπλανό απόσπασμα υπολογίζεται αρχικά η μέγιστη τιμή των στοιχείων του. Στην συνέχει εντοπίζονται οι θέσεις των στοιχείων που είναι ίσα με την μέγιστη τιμή.

11 Δισδιάστατοι πίνακες 15 18 13 14 12 20 19 Χρησιμοποιούνται όταν τα δεδομένα πρέπει να ομαδοποιούνται σε γραμμές και στήλες. Πχ. Για κάθε ένα από τα 4 μαθήματα να αποθηκεύω 3 βαθμολογίες, θα χρειαστώ πίνακα Β[4,3] Για την προσπέλαση δισδιάστατου πίνακα χρειάζονται δυο εμφωλευμένες δομές επανάληψης. Αν η μεταβλητή του εξωτερικού βρόχου αφορά τον 1ο δείκτη του πίνακα τότε έχουμε προσπέλαση κατά γραμμές, διαφορετικά κατά στήλες. Για κ από 1 μέχρι Ν Για λ από 1 μέχρι Μ Διάβασε Α[κ,λ] Τέλος_επανάληψης Τέλος_επανάληψης

12 Δισδιάστατοι Τετραγωνικοί Πίνακες
Τετραγωνικός είναι ο πίνακας που έχει ίδια διάσταση γραμμών και στηλών. Κύρια διαγώνιος τετραγωνικού πίνακα: Έστω πίνακας Α[Ν,Ν]. Το διπλανό απόσπασμα εμφανίζει τα στοιχεία της κύριας διαγωνίου του. Δευτερεύουσα διαγώνιος τετραγωνικού πίνακα: Έστω πίνακας Α[Ν,Ν]. Το διπλανό απόσπασμα εμφανίζει τα στοιχεία της δευτερεύουσας διαγωνίου. Για κ από 1 μέχρι Ν Για λ από 1 μέχρι Ν Αν κ=λ τότε Εμφάνισε Α[κ,λ] Τέλος_αν Τέλος_επανάληψης Τέλος_επανάληψης Για κ από 1 μέχρι Ν Για λ από 1 μέχρι Ν Αν (κ+λ=Ν+1) τότε Εμφάνισε Α[κ,λ] Τέλος_αν Τέλος_επανάληψης Τέλος_επανάληψης

13 Δισδιάστατοι Τετραγωνικοί Πίνακες
Εκατέρωθεν της κύριας διαγωνίου τετραγωνικού πίνακα: Έστω πίνακας Α[Ν,Ν]. Το διπλανό απόσπασμα εμφανίζει τα στοιχεία που βρίσκονται κάτω από την κύρια διαγώνιό του. Εκατέρωθεν της κύριας διαγωνίου τετραγωνικού πίνακα: Έστω πίνακας Α[Ν,Ν]. Το διπλανό απόσπασμα εμφανίζει τα στοιχεία που βρίσκονται πάνω από την κύρια διαγώνιό του. Για κ από 1 μέχρι Ν Για λ από 1 μέχρι Ν Αν κ>λ τότε Εμφάνισε Α[κ,λ] Τέλος_αν Τέλος_επανάληψης Τέλος_επανάληψης Για κ από 1 μέχρι Ν Για λ από 1 μέχρι Ν Αν (κ<λ) τότε Εμφάνισε Α[κ,λ] Τέλος_αν Τέλος_επανάληψης Τέλος_επανάληψης

14 Άθροισμα στοιχείων δισδιάστατου πίνακα: Έστω Α[Ν,Μ] ένας πίνακας αριθμών. Το διπλανό απόσπασμα υπολογίζει και εμφανίζει το άθροισμα των στοιχείων του. Διαιρώντας με το μέγεθος ΝxΜ του πίνακα έχουμε τον μέσο όρο των στοιχείων του Παρατηρείστε ότι η αρχικοποίηση έγινε πριν τις Για, ενώ η εμφάνιση μετά τις Για. Εύρεση θέσης ΜΟΝΑΔΙΚΟΥ μεγίστου: Έστω Α[Ν,Μ] ένας πίνακας αριθμών. Το διπλανό απόσπασμα υπολογίζει και εμφανίζει την θέση του στοιχείου του πίνακα με την μέγιστη τιμή, όταν αυτό είναι μοναδικό αποθηκεύοντας τις «συντεταγμένες» του στις μεταβλητές γρ και στ. Σ<-0 Για κ από 1 μέχρι Ν Για λ από 1 μέχρι Μ Σ<-Σ+Α[κ,λ] Τέλος_επανάληψης Τέλος_επανάληψης Εμφάνισε Σ Εμφάνισε Σ/(Ν*Μ) μεγ<-Α[1,1] γρ<-1 στ<-1 Για κ από 1 μέχρι Ν Για λ από 1 μέχρι Μ Αν Α[κ,λ]>μεγ τότε μεγ<-Α[κ,λ] γρ<-κ στ<-λ Τέλος_επανάληψης Τέλος_επανάληψης Εμφάνισε μεγ,γρ,στ

15 Άθροισμα γραμμών – στηλών σε δισδιάστατο πίνακα
Άθροισμα γραμμών: Το διπλανό απόσπασμα υπολογίζει το άθροισμα των στοιχείων κάθε γραμμής του και το τοποθετεί στον πίνακα Β[Ν]. Δηλαδή το άθροισμα των στοιχείων της κ γραμμής του πίνακα Α θα είναι το στοιχείο Β[κ] του πίνακα Β. Άθροισμα στηλών πίνακα: Αλλάζουμε μόνο την θέση των βρόγχων. Για κ από 1 μέχρι Ν Σ<-0 Για λ από 1 μέχρι Μ Σ<-Σ+Α[κ,λ] Τέλος_επανάληψης Β[κ]<-Σ Τέλος_επανάληψης Για λ από 1 μέχρι Ν Σ<-0 Για κ από 1 μέχρι Μ Σ<-Σ+Α[κ,λ] Τέλος_επανάληψης Β[λ]<-Σ Τέλος_επανάληψης

16 Αναζήτηση σε μονοδιάστατο πίνακα
Σειριακή (sequential) ή γραμμική (linear)μέθοδος 1η εκδοχή 2η εκδοχή Απαράδεκτη μέθοδος διότι ακόμα και αν βρει το key στο 1ο κελί, συνεχίζει την αναζήτηση μέχρι το τελευταίο στοιχείο του πίνακα! Στον προγραμματισμό δεν μας ενδιαφέρει μόνο να δώσουμε αλγόριθμο που «δουλεύει», αλλά απαιτούμε να είναι και αποδοτικός (efficient)!

17 Αναζήτηση σε μονοδιάστατο πίνακα
Σειριακή (sequential) ή γραμμική (linear)μέθοδος 4η εκδοχή 3η εκδοχή Μπορώ να αποφύγω τη χρήση της έξτρα μεταβλητής pos; Αν το key υπάρχει πολλές φορές μέσα στον πίνακα;

18 Αναζήτηση σε μονοδιάστατο πίνακα
Σειριακή (sequential) ή γραμμική (linear)μέθοδος Έστω ο παρακάτω ταξινομημένος πίνακας 10 12 16 20 28 29 38 40 51 100 Δεν δουλεύει αποδοτικά, διότι αν το key δεν υπάρχει μέσα στον πίνακα, ο αλγόριθμός μας θα ψάξει μέχρι και το τελευταίο κελί, μην αξιοποιώντας έτσι την ιδιότητα του ταξινομημένου πίνακα!!! Π.χ. αν ψάχνω τον 22, έχει νόημα να ψάχνω ακόμα όταν συναντήσω τον 28; Ο αλγόριθμος της σειριακής αναζήτησης είναι ο απλούστερος αλλά ο λιγότερο αποδοτικός αλγόριθμος. Οπότε, ενδείκνυται μόνο στις περιπτώσεις όπου Ο πίνακας είναι μη ταξινομημένος Ο πίνακας είναι μικρού μεγέθους Η αναζήτηση στον πίνακα γίνεται σπάνια

19 Ταξινόμηση/διάταξη μονοδιάστατου πίνακα
Δοθέντων των στοιχείων α1, α2, α3, …, αν η ταξινόμηση των στοιχείων συνίσταται στη μετάθεση της θέσης των στοιχείων, ώστε να τοποθετηθούν σε μία σειρά ακ1, ακ2, ακ3,…,ακν έτσι ώστε, δοθείσης μίας συνάρτησης διάταξης, να ισχύει: f(ακ1) ≤ f(ακ2) ≤ … ≤ f(ακν) Θα μελετήσουμε τον αλγόριθμο της ευθείας ανταλλαγής ο οποίος είναι ο πιο απλός αλλά και ο πιο αργός αλγόριθμος ταξινόμησης! Ο πλέον γρήγορος αλγόριθμος ταξινόμησης είναι η γρήγορη ταξινόμηση (quick sort)!

20 Ταξινόμηση/διάταξη μονοδιάστατου πίνακα
Ταξινόμηση ευθείας ανταλλαγής/φυσαλίδας 1ο 2ο 3ο 4ο 5ο 6ο 7ο 8ο 6 5 3 1 8 7 2 4

21 Ταξινόμηση μονοδιάστατου πίνακα
Ταξινόμηση ευθείας ανταλλαγής/φυσαλίδας Θέλουμε να ταξινομήσουμε κατά αύξουσα σειρά τον παρακάτω πίνακα Συγκρίνονται ζεύγη αριθμών και, αν χρειαστεί, αντιμετατίθενται ώστε ο μεγαλύτερος να βρεθεί στο 2ο κελί Όταν τελειώνει μια σάρωση του πίνακα, το μεγαλύτερο στοιχείο οδηγείται στο τέλος Όταν ένας αριθμός τοποθετηθεί στο τέλος, τα κελιά αυτά κλειδώνουν και δεν συμμετέχουν στις επόμενες συγκρίσεις ζευγαριών

22 Στοίβα Ώθηση (Push) στοιχείου στην κορυφή της στοίβας
Δομή δεδομένων με ένα άκρο, που υλοποιείται με την βοήθεια πινάκων. LIFO (Last-In-First-Out) Δύο είναι οι βασικές λειτουργείες που γίνονται σε μια στοίβα Ώθηση (Push) στοιχείου στην κορυφή της στοίβας Απώθηση (Pop) στοιχείου από την κορυφή της στοίβας Δείκτης top !! Ιδιαίτερη προσοχή δίνεται σε περίπτωση υπερχείλισης (overflow) και στην περίπτωση υποχείλισης (underflow).

23 Έστω μια στοίβα στην ακόλουθη κατάσταση
Έστω μια στοίβα στην ακόλουθη κατάσταση. Δώστε την κατάσταση της στοίβας και του δείκτη top για καθεμιά από τις παρακάτω πράξεις: α) Ώθηση της τιμής 15 β) Απώθηση γ) Απώθηση δ) Ώθηση της τιμής 18 Α ? 9 17 12 top=3 Α ? 15 9 17 12 Α ? 15 9 17 12 Α ? 15 9 17 12 Α ? 15 18 17 12 top=4 top=3 top=3 top=2

24 Τμήμα αλγορίθμου ώθησης
Διάβασε x αν top<N τότε top top A[top] x αλλιώς εμφάνισε “Υπερχείλιση” τέλος_αν

25 Τμήμα αλγορίθμου απώθησης
αν top > 0 τότε εμφάνισε Α[top] top top – 1 αλλιώς εμφάνισε “Υποχείλιση” τέλος_αν

26 Ουρά Εισαγωγή (enqueue))στοιχείου στο πίσω άκρο της ουράς
Δομή δεδομένων με δύο άκρα, που υλοποιείται με την βοήθεια πινάκων. FIFO (First-In-First-Out) Δύο είναι οι βασικές λειτουργίες που γίνονται σε μια ουρά Εισαγωγή (enqueue))στοιχείου στο πίσω άκρο της ουράς Εξαγωγή (dequeue) στοιχείου από το εμπρός άκρο της ουράς Δείκτες front και rear !! Ιδιαίτερη προσοχή δίνουμε στην περίπτωση που η ουρά είναι άδεια ή γεμάτη αντίστοιχα.

27 Έστω μια ουρά 8 θέσεων. Να δώσετε την κατάσταση της ουράς και των δεικτών για καθεμία από τις παρακάτω πράξεις: α) εισαγωγή της τιμής 18 β) εξαγωγή γ) εξαγωγή δ) εισαγωγή της τιμής 35 Α ? 32 67 45 front rear Α ? 32 67 45 18 front rear Α ? 32 67 45 18 front rear Α ? 32 67 45 18 front rear Α ? 32 67 45 18 35 front rear

28 Τμήμα αλγορίθμου εισαγωγής
διάβασε x αν rear < Ν τότε rear rear A[rear] x αλλιώς εμφάνισε “Η ουρά είναι γεμάτη” τέλος_αν

29 Τμήμα αλγορίθμου εξαγωγής
αν front <= rear τότε εμφάνισε A[front] front front +1 αλλιώς εμφάνισε “Η ουρά είναι άδεια” τέλος_αν


Κατέβασμα ppt "Κεφάλαιο 3ο Δομές Δεδομένων."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google