ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ Π.Μ.Σ. «ΠΛΗΡΟΦΟΡΙΚΗ» ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αναπλ. Καθηγητής Γεώργιος Α. Τσιχριντζής

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ Π.Μ.Σ. «ΠΛΗΡΟΦΟΡΙΚΗ» ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αναπλ. Καθηγητής Γεώργιος Α. Τσιχριντζής"

Transcript

1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Π.Μ.Σ. «ΠΛΗΡΟΦΟΡΙΚΗ» ΣΗΜΕΙΩΣΕΙΣ ΓΙΑ ΤΟ ΜΑΘΗΜΑ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Αναπλ. Καθηγητής Γεώργιος Α. Τσιχριντζής ΠΕΙΡΑΙΕΥΣ

2 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 1 η Διάλεξη Δεδομένα: Γεγονότα ή πληροφορίες (όπως μετρήσεις, στατιστικά στοιχεία, κ.λ.π.) (data) που χρησιμοποιούνται ως βάση για εξαγωγή συμπερασμάτων, συζήτηση, υπολογισμούς κ.λ.π. Δομή: Διάταξη στοιχείων ή συσχετίσεις μεταξύ στοιχείων (όπως σωματιδίων, (structure) οργάνων, κ.λ.π.) σε μία ουσία, σώμα, σύστημα κ.λ.π. 1. Ένα απλό και συνηθισμένο παράδειγμα δομής δεδομένων Ας θεωρήσουμε μια δωδεκάδα αυγών. Το κάθε αυγό το θεωρούμε ως ένα αντικείμενο που δεν μπορεί να αποσυντεθεί περαιτέρω, δηλαδή αδιαφορούμε για το γεγονός ότι το αυγό αποτελείται από το εξωτερικό κέλυφος, τη μεμβράνη, το ασπράδι και τον κρόκο. Θα λέμε ότι το αυγό αποτελεί για εμάς ένα άτομο 1 στοιχείο (atomic element). Για τoυς σκοπούς ενός μάγειρα, ένα αυγό δεν αποτελεί ένα άτομο στοιχείο, διότι τα συστατικά του (κέλυφος, μεμβράνη, ασπράδι, κρόκος) έχουν σημασία στη μαγειρική. Από την άλλη πλευρά, ο διαχειριστής του σούπερ-μάρκετ ενδιαφέρεται μόνο για πακέτα των δώδεκα αυγών. Κάθε φυσικό αντικείμενο μπορεί να αποσυντεθεί σε περισσότερο στοιχειώδη συστατικά και, μάλιστα, η σύγχρονη Φυσική δεν έχει καταλήξει ακόμα στο ύψιστο επίπεδο αποσύνθεσης. Γενικά, κάθε αντικείμενο μπορεί να αποσυντεθεί σε στοιχειωδέστερα συστατικά και, αντίθετα, μια συλλογή αντικειμένων μπορεί να θεωρηθεί ως ένα συνθετότερο αντικείμενο. Για παράδειγμα, μια γέφυρα είναι μια συλλογή πυλώνων, δοκών, καλωδίων, βιδών κ.λ.π, αλλά οι περισσότεροι από εμάς θεωρούν τη γέφυρα ως ένα αντικείμενο. Επικεντρώνουμε την προσοχή μας στο επίπεδο λεπτομέρειας που απαιτείται για δική (προσωπική) μας χρήση της γέφυρας (αντικειμένου). Είναι, επομένως, αναμενόμενο ένας οδηγός αυτοκινήτου και ένας πολιτικός μηχανικός να θεωρούν διαφορετικά άτομα στοιχεία όταν αναφέρονται σε μια γέφυρα. Τα προηγούμενα, μας οδηγούν στην έννοια της δομής (structure). Επιστρέφοντας στη δωδεκάδα αυγών, ας υποθέσουμε ότι προσδίδουμε σε κάθε ένα από αυτά μια ταυτότητα αναθέτοντας του έναν μοναδικό αριθμό από το 1 ως το 12. Η διαδικασία αυτή προσδίδει δομή στη δωδεκάδα αυγών, καθώς κατά κάποιο τρόπο τα διατάσσει σε μια ευθεία γραμμή με βάση τον αριθμό τους. 1 άτομο με την έννοια του μη περαιτέρω αναλυόμενου σε περισσότερο στοιχειώδη συστατικά.

3 Γενικά, είναι επιθυμητό να μπορούμε να εκτελέσουμε λειτουργίες (operations) πάνω στη δωδεκάδα των αυγών. Για παράδειγμα, θέλουμε να μπορούμε να επιλέξουμε οποιοδήποτε αυγό με βάση τον αριθμό (την ταυτότητά) του. Θέλουμε να μπορούμε να μεταφέρουμε, ολόκληρη τη δωδεκάδα ή ό,τι απέμεινε από αυτή. Θέλουμε να μπορούμε να προσθέσουμε νέα αυγά στη θέση κάποιων που αφαιρέσαμε, αλλά μόνο αν ο αριθμός (ταυτότητα) του νέου αβγού είναι ίδιος με τον αριθμό αυτού που αφαιρέθηκε. Μια συλλογή ατόμων αντικειμένων (αυγών) που έχουμε οργανώσει διανοητικά με κάποια δομή και για την οποία έχουμε ορίσει κάποιες λειτουργίες θα την ονομάσουμε μια αφηρημένη δομή αντικειμένων (αυγών). (abstract object (egg) structure). Μια αφηρημένη δομή αντικειμένων υπάρχει μόνο διανοητικά (στη φαντασία μας) και ορίζει το είδος των αντικειμένων, της δομής και των λειτουργιών, αλλά δεν ορίζει τον τρόπο υλοποίησης των αντικειμένων, της δομής και των λειτουργιών. Η υλοποίηση μιας αφηρημένης δομής αντικειμένων (αυγών) είναι μια φυσική δομή αντικειμένων (αυγών) (physical object (egg) structure) και πρέπει να ενεργεί ακριβώς όπως η αφηρημένη. Για παράδειγμα, για τη φυσική αποθήκευση αυγών μπορεί να χρησιμοποιηθεί ένα τελάρο δύο σειρών ή ένα τελάρο τριών σειρών ή ένα καλάθι. Αυτά είναι τα διατιθέμενα μέσα αποθήκευσης (storage media). Τα δύο πρώτα μέσα αποθήκευσης έχουν όμοια χαρακτηριστικά και μας επιτρέπουν να τοποθετήσουμε τα αυγά στην κατάλληλη σειρά και στήλη με βάση τον αριθμό τους. Στη συνέχεια, μπορούμε να αφαιρέσουμε το αυγό με κάποιο συγκεκριμένο αριθμό χωρίς να είναι εμφανής ο αριθμός, αλλά με κατάλληλο υπολογισμό σειράς και στήλης. Τέλος, αν πρόκειται να τα μεταφέρουμε, απλώς κλείνουμε το καπάκι του τελάρου. Το καλάθι δεν είναι τόσο καλό (εύχρηστο) μέσο αποθήκευσης για λειτουργίες όπως οι προηγούμενες. Αν τοποθετηθούν τα αβγά τυχαία μέσα στο καλάθι, τότε για να βρούμε το αυγό με συγκεκριμένο αριθμό πρέπει να τα ελέγξουμε όλα μέχρι να το πετύχουμε και αυτό είναι, βέβαια, χρονοβόρο. Τα αντικείμενα με τα οποία θα ασχοληθούμε στο μάθημα αυτό είναι αντικείμενα δεδομένων (data objects). Τα αντίστοιχα μέσα αποθήκευσης είναι υπολογιστικές μνήμες (computer memories). Τέλος, οι λειτουργίες επί των αντικειμένων είναι υπολογιστικοί αλγόριθμοι (computer algorithms). Θα ορίσουμε άτομα δεδομένα (atoms of data) οργανωμένα σε κάποια δομή, καθώς και λειτουργίες επ αυτών. Για την υλοποίηση των λειτουργιών, θα γραφούν αλγόριθμοι. Δεν θα ασχοληθούμε όμως με τη φυσική υλοποίηση των προηγουμένων.

4 2. Τύποι και δομές δεδομένων 2.1 Τιμή δεδομένων Ένας χρήσιμος όρος για το μάθημα αυτό είναι ο όρος τιμή δεδομένου (data value). Η τιμή δεδομένου είναι ένα δεδομένο που θεωρούμε, ίσως μόνο για μια στιγμή, ως μια ενιαία οντότητα. Για παράδειγμα, ο ακέραιος αριθμός 123 μπορεί να θεωρηθεί ως μια ενιαία οντότητα. Επίσης, υπό κάποιες συνθήκες το σύνολο {156,259,327} μπορεί να θεωρηθεί ως μια νέα οντότητα. Αντίθετα, υπό άλλες συνθήκες, ο ακέραιος αριθμός 123 μπορεί να αποσυντεθεί, όπως παρακάτω: Παρόμοια, το σύνολο {156,259,327} μπορεί να θεωρηθεί ότι αποσυντίθεται στη συλλογή των τριών ακεραίων 156, 259 και 327, καθένας από τους οποίους αποσυντίθεται περαιτέρω σε ακολουθίες τριών ψηφίων, καθένα από τα οποία αποσυντίθεται σε πίνακες κουκίδων. Γενικά, μια άτομη τιμή δεδομένου (atomic data value) είναι ένα δεδομένο που επιλέγουμε να θεωρήσουμε ως ενιαία, μη αποσυνθέσιμη οντότητα. Αν αποσυνθέσουμε μια τιμή δεδομένου, όπως προηγουμένως, αποκαλύπτουμε τα

5 συνιστώνται στοιχεία (component elements) ή απλώς στοιχεία (elements) της τιμής δεδομένου. 2.2 Τύποι δεδομένων Η έννοια του τύπου (type) περιγράφει μια προσπάθεια να προσδιοριστούν ιδιότητες ή ποιοτικά χαρακτηριστικά κοινά σε μια ομάδα αντικειμένων που καθιστούν τα αντικείμενα μια ξεχωριστή κλάση ή ένα ξεχωριστό είδος. Ένας τύπος δεδομένων (data type) είναι ο συνδυασμός ενός συνόλου τιμών δεδομένων και ενός συνόλου λειτουργιών επί αυτών των τιμών. Ένας άτομος τύπος δεδομένων (atomic data type) είναι ένας τύπος δεδομένων στον οποίο αντιστοιχεί ένα σύνολο άτομων τιμών δεδομένων. Ένας δομημένος τύπος δεδομένων (structured data type) ή μια δομή δεδομένων (data structure) είναι ένας τύπος δεδομένων που αντιστοιχεί σε ένα σύνολο τιμών δεδομένων που αποσυντίθεται σε συνιστώντα στοιχεία αλληλοσυσχετιζόμενα με κάποια δομή. Δηλαδή, οι τιμές δεδομένων ενός δομημένου τύπου δεδομένων αποσυντίθενται σε συνιστώντα στοιχεία και έχουν δομή με τη μορφή κανόνων που τα αλληλοσυσχετίζουν. Παράδειγμα άτομου τύπου δεδομένων: Ακέραιοι Αριθμοί Σύνολο τιμών = {,-2,-1,0,1,2, } Λειτουργίες = { Πρόσθεση, Αφαίρεση, Πολλαπλασιασμός, Διαίρεση, Απόλυτη τιμή, }. Παράδειγμα δομής δεδομένων: Διάνυσμα τριών Πραγματικών Αριθμών. Σύνολο τιμών = {[x 1,x 2,x 3 ], όπου x 1,x 2,x 3 είναι οποιοιδήποτε πραγματικοί αριθμοί}. Λειτουργίες = {Πρόσθεση διανυσμάτων, λειτουργία επί των τιμών δεδομένων Αφαίρεση διανυσμάτων λειτουργία επί των τιμών δεδομένων Άθροισμα συνιστωσών διανύσματος λειτουργία επί των συνιστώντων στοιχείων Μήκος διανύσματος λειτουργία επί των συνιστώντων στοιχείων... }

6 2.3 Επίπεδα Αφαίρεσης σε Τύπους Δεδομένων. Ο τρόπος με τον οποίο ένας τύπος δεδομένων υπάρχει διανοητικά (στη φαντασία μας) ορίζει έναν αφηρημένο τύπο δεδομένο (abstract data type). Ο τρόπος με τον οποίο θα αναπαρασταθούν (data representation) τα δεδομένα και θα υλοποιηθούν σε κώδικα (code implementation) οι λειτουργίες, δεν μας απασχολεί στο επίπεδο σχεδίασης ενός αφηρημένου τύπου δεδομένων. Όταν υλοποιούμε έναν τύπο δεδομένων σε μια γλώσσα προγραμματισμού υψηλού επιπέδου όπως η Pascal, πρέπει να χρησιμοποιήσουμε εντολές, τύπους δεδομένων και δομές δεδομένων της Pascal. Λέμε ότι υλοποιούμε έναν εικονικό τύπο δεδομένων (virtual data type) σε μια εικονική μηχανή (virtual machine). Τέλος, κάθε δομή δεδομένων πρέπει να υλοποιηθεί σε μια φυσική μηχανή (physical machine) ως φυσικός τύπος δεδομένων (physical data type) και με χρήση γλώσσας μηχανής (machine language). Κάθε φυσική μηχανή έχει ενσωματωμένους (εγγενείς, native) τύπους δεδομένων που διαχειρίζονται δυαδικές τιμές δεδομένων, δηλαδή δυαδικά ψηφία (bits).

7 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 2 η Διάλεξη 3. Αφηρημένοι Τύποι Δεδομένων 3.1 Απλοί τύποι Υπενθυμίζουμε ότι ένας απλός τύπος δεδομένων περιλαμβάνει ένα σύνολο επιτρεπτών τιμών των δεδομένων και ένα σύνολο λειτουργιών επί των τιμών αυτών. Για παράδειγμα, θεωρούμε έναν αφηρημένο τύπο δεδομένων που θα ονομάζουμε χρώμα. Οι τιμές των δεδομένων αυτού του τύπου είναι χρώματα και περιλαμβάνουν τα βασικά χρώματα της ζωγραφικής, δηλαδή το κόκκινο, το κίτρινο και το μπλε, καθώς και όλα τα δευτερεύοντα χρώματα που παράγονται με ανάμιξη των κυρίων. Τέσσερις λειτουργίες που μπορούν να οριστούν πάνω στις τιμές αυτού του τύπου δεδομένων είναι αυτές στον επόμενο πίνακα: Σύνολο τιμών: Λειτουργίες: Αφηρημένος Τύπος Δεδομένων Χρώμα Σύνολο των χρωμάτων {κόκκινο, κίτρινο, μπλε, πράσινο, πορτοκαλί, βιολετί}. 1. mix(c1,c2:color):color Φτιάξε ένα χρώμα αναμιγνύοντας τα χρώματα c1 και c2. pre Τα c1 και c2 να είναι κύρια χρώματα. post Το αποτέλεσμά της είναι το χρώμα που σχηματίζεται από ίσα ποσά c1 και c2. 2. primary(c:color):boolean Απόφανση για το αν το χρώμα c είναι κύριο. pre Καμιά. post Το αποτέλεσμά της είναι true αν το χρώμα c είναι κύριο, αλλιώς false. 3. form(c:color, var c1,c2:color) Ποια χρώματα σχηματίζουν το χρώμα c; pre Το χρώμα c δεν είναι κύριο post Τα χρώματα c1 και c2 είναι τα δύο κύρια χρώματα που σχηματίζουν το χρώμα c. 4. assign(var c1:color,c2:color) Ανάθεσε την τιμή c2 στη μεταβλητή c1. Οι προηγούμενες λειτουργίες είναι απλές και επελέγησαν για απλότητα. Ειδικά, η λειτουργία assign είναι αναγκαία επειδή πρέπει πάντα κάποια λειτουργία να επιτρέπει τον προσδιορισμό τιμών για μεταβλητές του τύπου δεδομένων. Η ένδειξη pre αποτελεί συντόμευση της λέξης precondition (προϋπόθεση) και είναι μια δήλωση των συνθηκών που προαπαιτούνται για να εκτελεσθεί σωστά μια

8 λειτουργία. Αν κάποιες προϋποθέσεις σωστής εκτέλεσης μιας λειτουργίας δεν ικανοποιούνται, τότε πολλά είναι δυνατά, όπως τερματισμός ενός προγράμματος, μη σωστός υπολογισμός των αποτελεσμάτων κ.λ.π. Κάποιες προϋποθέσεις μπορεί να υπονοούνται χωρίς να εκφράζονται άμεσα. Για παράδειγμα, στη λειτουργία mix τα c1 και c2 πρέπει να έχουν επιτρεπτές τιμές χρωμάτων. Η ένδειξη post αποτελεί μια συντόμευση της λέξης postcondition (αποτέλεσμα) και αποτελεί μια δήλωση και μια περιγραφή των αποτελεσμάτων των δράσεων της λειτουργίας. Η δήλωση αυτή πρέπει να είναι απολύτως ακριβής, όμως δεν περιγράφει πώς επιτυγχάνονται τα επιθυμητά αποτελέσματα, αλλά μόνο τι πρέπει να είναι αυτά. Τόσο οι προϋποθέσεις, όσο και τα αποτελέσματα λειτουργιών περιγράφονται και δηλώνονται με ευκολία με τη χρήση ενός μαθηματικού εργαλείου που ονομάζεται κατηγορηματικός λογισμός (predicate calculus) και παρουσιάζεται στα μαθήματα της Μαθηματικής Λογικής και του Λογικού Προγραμματισμού. Στο σημείο αυτό, παρατηρούμε ότι προϋπόθεση της λειτουργίας form είναι η τιμή του c να μην είναι κύριο χρώμα. Πώς μπορεί ο χρήστης να αποφύγει να εφαρμόσει τη λειτουργία form σε ένα κύριο χρώμα; Παρατηρούμε ότι η λειτουργία primary εκτελεί ακριβώς αυτό τον έλεγχο. Κατά γενική σύμβαση, όταν απαιτείται να ικανοποιείται κάποια προϋπόθεση για την εκτέλεση μιας λειτουργίας, τότε θα πρέπει να ορίζεται και μια αντίστοιχη λειτουργία που να ελέγχει την προϋπόθεση της πρώτης. Στο παράδειγμά μας, θα μπορούσαμε εναλλακτικά να ορίσουμε ότι η λειτουργία form έχει ως αποτέλεσμα c1=c2=c όταν c είναι το κύριο χρώμα. Η απόφανση για την ακριβή μορφή της λειτουργίας form επαφίεται στο σχεδιαστή του αφηρημένου τύπου δεδομένων. 3.2 Αφηρημένες δομές δεδομένων Ας υποθέσουμε ότι επιθυμούμε να ορίσουμε μια αφηρημένη δομή δεδομένων που θα ονομάσουμε γραμματοσειρά. Οι τιμές των δεδομένων θα είναι ακολουθίες (λίστες) γραμμάτων του αλφαβήτου, συμπεριλαμβανομένου και του κενού χαρακτήρα. Μια επιτρεπτή τιμή δεδομένων αυτού του τύπου αποτελεί, για παράδειγμα, η πρώτη γραμμή αυτών των σημειώσεων. Ως λίστα ή ακολουθία γραμμάτων εννοούμε μια γραμμική τους διάταξη. Ας υποθέσουμε ότι επιβάλλουμε τον πρόσθετο περιορισμό μια γραμματοσειρά να μην ξεπερνά τους 80 χαρακτήρες σε μήκος, αλλά και να μην επιτρέπουμε γραμματοσειρές μηδενικού μήκους (δηλαδή χωρίς καθόλου γράμματα ή κενούς χαρακτήρες). Υπενθυμίζουμε ότι τα συνιστώντα στοιχεία ή απλώς στοιχεία είναι οι συνιστώσες των τιμών των δεδομένων σε μια δομή δεδομένων. Στην περίπτωσή μας, τα συνιστώντα στοιχεία είναι γράμματα ή κενοί χαρακτήρες. Σε κάθε γραμματοσειρά, υπάρχει ένα πρώτο (στην πλέον αριστερή θέση) και ένα τελευταίο (στην πιο δεξιά θέση) στοιχείο. Επίσης, κάθε στοιχείο εκτός από το πρώτο έχει ένα προηγούμενο (predecessor), ενώ κάθε στοιχείο, εκτός από το τελευταίο, έχει ένα επόμενο στοιχείο (successor). Άρα, μια γραμματοσειρά έχει μια γραμμική δομή.

9 Οι επιτρεπτές τιμές μιας γραμματοσειράς είναι το σύνολο όλων των δυνατών συνδυασμών 80 ή λιγότερων γραμμάτων καθώς και η κενή γραμματοσειρά. Άρα, το σύνολο τιμών μιας γραμματοσειράς είναι μεγάλο, αλλά πεπερασμένο. Στον επόμενο πίνακα ορίζουμε και τις λειτουργίες επί των τιμών της δομής δεδομένων γραμματοσειρά. Αφηρημένος Τύπος Δεδομένων Γραμματοσειρά Τα συνιστώντα στοιχεία είναι οι χαρακτήρες a - z, A - Z Στοιχεία: και ο κενός χαρακτήρας, θα τα ονομάζουμε γράμματα. Υπάρχει μια γραμμική σχέση (δομή) μεταξύ των γραμμάτων Δομή: σε κάθε τιμή γραμματοσειράς Σε κάθε γραμματοσειρά, εμφανίζονται από 0 ως 80 Σύνολο τιμών: γράμματα. 1. leftletter(vars:letterstring):letter pre Ο αριθμός γραμμάτων στη γραμματοσειρά να είναι μεγαλύτερος του 0. post Το αποτέλεσμά είναι το γράμμα στην πιο αριστερή θέση της γραμματοσειράς. 2. append(l:letter;var s:letterstring) pre Ο αριθμός γραμμάτων στη γραμματοσειρά εισόδου είναι μικρότερος του 80. post Η γραμματοσειρά s είναι η γραμματοσειρά εισόδου με το γράμμα l προσαρτημένο στα δεξιά της. 3. empty(s:letterstring):boolean Λειτουργίες: pre Καμία post Αν το s περιέχει 0 γράμματα, τότε το αποτέλεσμα της λειτουργίας είναι true, αλλιώς το αποτέλεσμα της λειτουργίας είναι false. 4. full(s:letterstring):boolean pre Καμιά post Αν το s περιέχει 80 γράμματα, τότε το αποτέλεσμα της λειτουργίας είναι true, αλλιώς το αποτέλεσμα της λειτουργίας είναι false. 5. reverse (vars:letterstring) pre Καμιά post Η ακολουθία γραμμάτων στη γραμματοσειρά αντιστρέφεται. Η διαδικασία σχηματισμού ενός πίνακα για την περιγραφή ενός απλού ή σύνθετου τύπου δεδομένων οδηγεί σε μια απλή, συστηματική και ακριβή απεικόνιση των λειτουργικών προδιαγραφών (functional specifications) του αφηρημένου τύπου δεδομένων. Άλλες προδιαγραφές, που μπορεί να περιγραφούν επιπρόσθετα, περιλαμβάνουν ταχύτητες εκτέλεσης λειτουργιών, απαιτούμενες ποσότητες μνήμης, κ.λ.π.

10 3.3 Πλεονεκτήματα των Αφηρημένων Τύπων Δεδομένων Υπάρχουν πολλά πλεονεκτήματα στη μελέτη των δομών δεδομένων με τη χρήση αφηρημένων τύπων δεδομένων: Ακριβείς προδιαγραφές (Precise Specifications) Τμηματικότητα (Modularity) Information Hiding (Απόκρυψη πληροφορίας) Απλότητα (Simplicity): Η αφαίρεση οδηγεί σε μείωση της πολυπλοκότητας Integrity (Ακεραιότητα): Οι διάφορες προϋποθέσεις εκτέλεσης λειτουργιών επιβάλλουν περιορισμούς και αντίστοιχους ελέγχους στα δεδομένα Ανεξαρτησία υλοποίησης (Implementation Independence)

11 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 3 η Διάλεξη 4. Δείκτες, πίνακες και εγγραφήματα Στις αμέσως επόμενες διαλέξεις, θα ασχοληθούμε με τρεις τύπους δεδομένων, έναν απλό, τον δείκτη (pointer) και δύο σύνθετους, τους πίνακες (arrays) και τα εγγραφήματα (records). Αυτοί οι τρεις τύποι δεδομένων είναι απολύτως βασικοί και για το λόγο αυτό, ενσωματώνονται στις περισσότερες γλώσσες προγραμματισμού υψηλού επιπέδου. Για παράδειγμα, οι πίνακες αποτελούν την κύρια και μάλιστα την μοναδική δομή δεδομένων της FORTRAN, ενώ τα εγγραφήματα αποτελούν τη βάση για την οργάνωση των δεδομένων στην COBOL. Στις πιο σύγχρονες μορφές προγραμματισμού, χρησιμοποιούνται πιο ολοκληρωμένες δομές δεδομένων, οι οποίες μπορεί να αποτελούν υψηλότερο επίπεδο αφαίρεσης δεδομένων των τριών αυτών βασικών δομών. Τόσο οι πίνακες, όσο και τα εγγραφήματα αποτελούνται από μια ομάδα στοιχείων που μπορεί να είναι είτε απλά (άτομα) είτε, υπό συνθήκες, άλλες δομές δεδομένων. Οι πίνακες και τα εγγραφήματα παρουσιάζουν πολλές ομοιότητες, όπως το ότι είναι βασικές δομές δεδομένων, είναι λογικά γραμμικές (linear) δομές ως προς τις σχέσεις μεταξύ των στοιχείων τους και τα στοιχεία τους αποθηκεύονται σε λογικά διαδοχικές θέσεις μνήμης. Αυτή η τοποθέτηση (αποθήκευση) στοιχείων σε διαδοχικές θέσεις μνήμης επιταχύνει την εκτέλεση λειτουργιών πινάκων. Διαφορές ανάμεσα στους πίνακες και τα εγγραφήματα προκύπτουν από το γεγονός ότι όλα τα στοιχεία ενός πίνακα πρέπει να είναι του ίδιου τύπου, ενώ τα στοιχεία ενός εγγραφήματος μπορεί να είναι ετερογενή (διαφορετικού τύπου). Η ικανότητα των εγγραφημάτων να ομαδοποιούν και να διαχειρίζονται (π.χ. να συσχετίζουν, να διαβάζουν, να γράφουν και να μετακινούν) συλλογές ετερογενών δεδομένων ως μια ενιαία οντότητα είναι πολύ σημαντική. Έχει όμως και ένα σημαντικό μειονέκτημα. Μια συνιστώσα ενός πίνακα ταυτοποιείται με προσδιορισμό των τιμών των δεικτών της. Αντίθετα, μια συνιστώσα ενός εγγραφήματος ταυτοποιείται με προσδιορισμό του ονόματός της. Γενικά, οι γλώσσες προγραμματισμού επιτρέπουν οι δείκτες των πινάκων να είναι μεταβλητές ή εκφράσεις ή σταθερές, αλλά τα ονόματα των στοιχείων των εγγραφημάτων δεν μπορούν να μεταβληθούν κατά την εκτέλεση ενός προγράμματος. Οι δομές δεδομένων πρέπει να έχουν κάποιο μηχανισμό για να συσχετίζουν τα συστατικά τους τμήματα. Για τους πίνακες και τα εγγραφήματα, αυτό μπορεί να επιτευχθεί τοποθετώντας διαδοχικά στοιχεία σε διαδοχικές θέσεις μνήμης. Εναλλακτικά προς αυτή την προσεκτική τοποθέτηση των στοιχείων στη μνήμη, τα στοιχεία μπορούν να διασπαρθούν στη μνήμη με οποιονδήποτε τρόπο. Η αφηρημένη συσχέτισή τους μπορεί να διατηρηθεί με τη μορφή μιας συνδεδεμένης δομής δεδομένων (linked data structure). Η συνδεδεμένη δομή δεδομένων επαναφέρει τη

12 λογική σειρά διεσπαρμένων δεδομένων συσχετίζοντας κάθε στοιχείο με μια κατευθυνόμενη γραμμή που δείχνει προς το λογικά επόμενο στοιχείο. Ένα παράδειγμα διεσπαρμένων στοιχείων και της αντίστοιχης συνδεδεμένης δομής δεδομένων είναι το επόμενο: Στις συνδεδεμένες δομές δεδομένων, κάθε στοιχείο περιέχει, εκτός από δεδομένα, και πληροφορία για τη θέση στο μέσο αποθήκευσης των λογικώς συσχετισμένων στοιχείων. Οι μεταβλητές που περιέχουν αυτή την πληροφορία ονομάζονται μεταβλητές δείκτη (pointer variables). Οι τιμές των μεταβλητών δείκτη σχεδιάζονται ως κατευθυνόμενες γραμμές. Στην PASCAL για παράδειγμα, παρέχονται τύποι δεδομένων δείκτη των οποίων οι τιμές είναι διευθύνσεις μνημών τυχαίας προσπέλασης. 4.1 Πίνακες Στοιχεία: Δομή: Λειτουργίες: Αφηρημένη Δομή Δεδομένων Πίνακας Προσδιορίζεται ένας τύπος δεδομένων και όλα τα συνιστώντα στοιχεία είναι αυτού του τύπου δεδομένων. Επομένως, ένας πίνακας είναι μια ομογενής δομή δεδομένων Προσδιορίζεται ένας τύπος δεδομένων δείκτη που πρέπει να είναι γραμμικός. Υπάρχει μια αντιστοιχία ενός - προς - ένα μεταξύ των τιμών του δείκτη και των συνιστωσών κάθε τιμής του πίνακα. Υπάρχουν δύο βασικές λειτουργίες επί των συνιστωσών ενός πίνακα. Αν το S είναι ένας πίνακας, c μια μεταβλητή του τύπου των συνιστωσών του πίνακα και i μια μεταβλητή του τύπου του δείκτη του πίνακα ή μια έκφραση της οποίας η τιμή είναι του τύπου του δείκτη του πίνακα, τότε η λειτουργία retrieve(s, c, i) αναθέτει στη μεταβλητή c την τιμή της συνιστώσας του πίνακα S που αντιστοιχεί στην τιμή δείκτη i. Επίσης, η λειτουργία update(s, c, i) αναθέτει την τιμή της μεταβλητής c στη συνιστώσα του πίνακα S που αντιστοιχεί στην τιμή δείκτη i. Η ένα - προς - ένα αντιστοιχία των τιμών δείκτη και των συνιστώντων στοιχείων ενός πίνακα είναι ιδιαίτερα σημαντική. Δεδομένης μιας τιμής δείκτη, η υλοποίηση του πίνακα πρέπει να προσδιορίζει τη διεύθυνση της συνιστώσας που σχετίζεται με αυτή

13 την τιμή. Επιπλέον, ο χρόνος που απαιτείται για να μετατραπεί η τιμή δείκτη σε διεύθυνση μιας συνιστώσας δεν πρέπει να εξαρτάται από την τιμή δείκτη. Για το λόγο αυτό, ένας πίνακας αποτελεί δομή δεδομένων τυχαίας προσπέλασης (random access data structure). Παράδειγμα πίνακα: S: array [1 3] of integer; Τιμές δείκτη Αντιστοιχία ενός προς ένα Τιμές Συνιστωσών πίνακα [1] 19 [2] 28 [3] 11 Οι συνιστώσες ενός πίνακα μπορεί να είναι και οι ίδιες πίνακες, όχι όμως ο ίδιος πίνακας. Ένα παράδειγμα είναι το επόμενο: S 1 : array[1 3] of integer; S 2 : array[1 2] of S 1 ; Ο προηγούμενος συμβολισμός είναι άκομψος. Ένας καλύτερος συμβολισμός είναι ο επόμενος: S 2 : array[1 2, 1 3] of integer; Οι δύο αυτοί συμβολισμοί περιγράφουν τον ίδιο πίνακα. Η ιδέα αυτή μπορεί να γενικευτεί σε οποιοδήποτε επίπεδο εμφώλευσης πινάκων ως συνιστώντων στοιχείων. Το αποτέλεσμα είναι πολυδιάστατοι πίνακες (multidimensional arrays). Αφηρημένος Τύπος Δεδομένων Δισδιάστατος Πίνακας Προσδιορίζεται ο τύπος δεδομένων και όλες οι συνιστώσες Στοιχεία: είναι του ίδιου τύπου. Προσδιορίζονται δύο τύποι δείκτη, καθένας από τους οποίους είναι γραμμικός. Υπάρχει μια αντιστοιχία ενός - προς Δομή: - ένα μεταξύ των τιμών του Καρτεσιανού γινομένου των τύπων δείκτη και των συνιστωσών κάθε τιμής του πίνακα. Υπάρχουν δύο βασικές λειτουργίες επί των συνιστωσών ενός δισδιάστατου πίνακα. Αν S είναι ένας δισδιάστατος πίνακας, c μια μεταβλητή του τύπου των συνιστωσών του πίνακα S και i 1 και i 2 μεταβλητές των αντίστοιχων τύπων δείκτη ή Λειτουργίες: εκφράσεις των οποίων οι τιμές είναι των αντίστοιχων τύπων δείκτη, τότε η λειτουργία retrieve(s, c, i 1, i 2 ) αναθέτει στη μεταβλητή c την τιμή της συνιστώσας του πίνακα S που αντιστοιχεί σε τιμές δεικτών i 1 και i 2.

14 Αντίστοιχα, η λειτουργία update(s, c, i 1, i 2 ) αναθέτει την τιμή της μεταβλητής c στη συνιστώσα του πίνακα S που αντιστοιχεί σε τιμές δεικτών i 1 και i 2. Η λειτουργία retrieve μπορεί να αποτύχει αν μία ή περισσότερες τιμές δείκτη δεν εκπληρούν τις προϋποθέσεις του τύπου δείκτη ή αν υπάρχει μια απροσδιόριστη τιμή στη διεύθυνση που αντιστοιχεί στην τιμή δείκτη. Η λειτουργία update αποτυγχάνει αν η τιμή δείκτη δεν ικανοποιεί τις προϋποθέσεις του αντίστοιχου τύπου. Υπάρχει ένας αριθμός παραμέτρων που αφορούν έναν πίνακα: η βασική διεύθυνσή του (base address) το μήκος των συνιστωσών του (component length) το άνω και το κάτω όριο κάθε τύπου δείκτη. Συγκεκριμένα, η βασική διεύθυνση είναι η διεύθυνση στη μνήμη που βρίσκεται αποθηκευμένο το πρώτο byte της πρώτης συνιστώσας του πίνακα. Το ποσό μνήμης (σε bytes) που απαιτείται για την αποθήκευση μιας οποιασδήποτε συνιστώσας του πίνακα ονομάζεται μήκος συνιστώσας του πίνακα. Συνήθως, το μήκος συνιστώσας είναι το ίδιο για οποιαδήποτε συνιστώσα ενός πίνακα, όμως υπάρχουν και πίνακες με διαφορετικό μήκος συνιστώντων στοιχείων. Κάθε τύπος δείκτη πρέπει να είναι διατεταγμένος τύπος. Επομένως, κάθε τύπος δείκτη μπορεί να θεωρηθεί ως υποσύνολο των ακεραίων και έχει μια ελάχιστη (κάτω όριο, lower bound) και μια μέγιστη (άνω όριο, upper bound) τιμή. Επομένως, ένας d-διάστατος πίνακας με μήκος συνιστώσας L και άνω (κάτω) όρια δεικτών u 1, u 2,, u d (l 1, l 2,, l d ) απαιτεί L * (u 1 -l 1 +1) * (u 2 -l 2 +1) * * (u d -l d +1) bytes μνήμης για να αποθηκευτεί. Αν η βασική διεύθυνση του πίνακα είναι b, τότε η διεύθυνση της συνιστώσας που αντιστοιχεί σε τιμές δεικτών i 1, i 2,, i d προσδιορίζεται με την επόμενη συνάρτηση απεικόνισης πίνακα (array mapping function): όπου c d = L addr (a [i 1, i 2,, i d ]) = c 0 + c 1 * i 1 + c 2 * i c d * i d, c j-1 = (u j l j +1) * c j, 1 < j d c 0 = b c 1 * l 1 c 2 * l c d * l d. Παράδειγμα: Διδιάστατος Πίνακας Για τον πίνακα:

15 a: array[0.. 2, 4.. 5] of integer; Έχουμε: l 1 = 0, u 1 = 2 l 2 = 4, u 2 = 5 Αν μας δοθεί B = 500 και L = 15 Οι τοποθεσίες των περιεχομένων του πίνακα θα είναι οι ακόλουθες: Διεύθυνση Τιμές Περιέχομένων Τιμές τμημάτων δειγμάτων 500 [0, 4] [0, 5] [1, 4] [1, 5] [2, 4] [2, 5] 45 Η συνάρτηση απεικόνισης πίνακα είναι: c 2 = 15 c 1 = ( ) 15 = 30 c 0 = = 440 addr(a[i, j]) = i + 15 j Για παράδειγμα: addr(a[1, 5]) = = 545

16 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 4 η Διάλεξη 4.2 Εγγραφήματα Ένα σημαντικό χαρακτηριστικό των εγγραφημάτων είναι η ικανότητά τους να ομαδοποιούν στοιχεία δεδομένων διαφορετικών τύπων σε μια ενιαία οντότητα. Για παράδειγμα, ένα εγγράφημα που περιγράφει ένα πρόσωπο μπορεί να περιλαμβάνει το ονοματεπώνυμο, τη διεύθυνση, τον αριθμό τηλεφώνου, το φύλο, την ηλεκτρονική διεύθυνση και μια άλλη ποικιλία δεδομένων του προσώπου αυτού. Όλη αυτή η πληροφορία μπορεί να αντιμετωπιστεί είτε ως ένα απλό (άτομο) στοιχείο δεδομένων (π.χ. κατά τη μεταφορά, αποθήκευση, ανάκτηση κ.λ.π. της πληροφορίας), είτε ως η σύνθεση των διαφόρων πεδίων της. Τα ίδια τα πεδία μπορεί να μην αποτελούν απλά (άτομα) δεδομένα, αλλά αντίθετα να είναι και αυτά δομές δεδομένων. Εξαιτίας αυτών, η έννοια του εγγραφήματος είναι πολύ σημαντική για τη λογική ενότητα και ευκολία του προγραμματισμού. Όπως έχουμε ήδη αναφέρει, ο τρόπος με τον οποίο τα εγγραφήματα οργανώνουν ανομοιογενή δεδομένα έχει το μειονέκτημα οι συνιστώσες των εγγραφημάτων να προσπελαύνονται με τους ταυτοποιητές (ονόματα) (component identifiers) τους. Δυστυχώς οι ταυτοποιητές των συνιστωσών των εγγραφημάτων πρέπει να προσδιορίζονται κατά τη φάση της σύνταξης ενός προγράμματος και δεν επιδέχονται αλλαγής κατά τη φάση της εκτέλεσής του. Η χρήση των εγγραφημάτων ξεκίνησε σε πρώιμες εφαρμογές δεδομένων επιχειρήσεων και καθιερώθηκε ως η κύρια δομή δεδομένων της γλώσσας COBOL. Οι σχεδιαστές γλωσσών όπως η FORTRAN ή η BASIC δεν αντιλήφθηκαν τη σημασία των εγγραφημάτων σε επιστημονικές εφαρμογές και εφαρμογές γενικού σκοπού, γεγονός που διορθώθηκε σε γλώσσες όπως η PL/1, η C, η Pascal, η Ada και η Modula2. Στις γλώσσες αυτές, τα εγγραφήματα αποτελούν έναν ενδογενή τύπο δεδομένων. Αφηρημένος Τύπος Δεδομένων Εγγράφημα Για κάθε συνιστούν στοιχείο, προσδιορίζεται ένας τύπος δεδομένων. Επειδή τα συνιστώντα στοιχεία είναι Στοιχεία: διαφορετικού τύπου, το εγγράφημα είναι ετερογενής δομή δεδομένων. Προσδιορίζεται μια λίστα ταυτοποιητών, ώστε σε κάθε συνιστώσα να αντιστοιχεί ένας ταυτοποιητής. Η δομή του Δομή: εγγραφήματος είναι η ενός-προς-ένα αντιστοιχία μεταξύ των ταυτοποιητών και των συνιστωσών. Λειτουργίες: Θεωρούμε δύο λειτουργίες. Αν R είναι ένας ταυτοποιητής

17 ενός εγγραφήματος, id ένας από τους ταυτοποιητές των συνιστωσών του και v μια μεταβλητή του ίδιου τύπου δεδομένων όπως ο ταυτοποιητής id, τότε: retrieve (R,v,id) αναθέτει στη μεταβλητή v την τιμή της συνιστώσας του εγγραφήματος R που ταυτοποιείται από τον id και update(r,v,id) αναθέτει την τιμή της μεταβλητής v στη συνιστώσα του εγγραφήματος R που ταυτοποιείται από τον id. Ένας ταυτοποιητής μαζί με τον προσδιορισμό του τύπου των δεδομένων του θα τον ονομάζουμε πεδίο (field). Όλα τα πεδία ενός εγγραφήματος αποτελούν μια λίστα πεδίων (field list) και προσδιορίζουν τις συνιστώσες του εγγραφήματος. Όπως και οι πίνακες, τα εγγραφήματα περιγράφονται από παραμέτρους. Συγκεκριμένα, οι παράμετροι περιγραφής ενός εγγραφήματος είναι η βασική θέση (διεύθυνση) b (δηλ. η διεύθυνση αποθήκευσης του πρώτου byte του εγγραφήματος), η λίστα πεδίων του εγγραφήματος και τα μήκη των πεδίων. Οι ταυτοποιητές των πεδίων ενός εγγραφήματος πρέπει να είναι μοναδικοί, ενώ το μήκος κάθε πεδίου προσδιορίζεται από τον αντίστοιχο τύπο δεδομένων και το φυσικό υπολογιστικό σύστημα στο οποίο θα υλοποιηθεί το εγγράφημα. Όταν αναφέρεται το όνομα ενός πεδίου σε ένα πρόγραμμα, πρέπει να προσδιορίζονται τουλάχιστον τρία πράγματα: 1. Ο τύπος δεδομένων του πεδίου 2. Το μήκος του πεδίου 3. Η απόστασή του (offset) από τη βάση του εγγραφήματος. Για να επιτευχθεί αυτό, κατασκευάζεται ένας πίνακας με αυτές τις ποσότητες τη στιγμή που προσδιορίζονται οι παράμετροι του εγγραφήματος. Διάφορες γλώσσες προγραμματισμού παρέχουν τη δυνατότητα εγγραφήματα να έχουν μεταβλητό μήκος ανάλογο προς τα δεδομένα που αποθηκεύουν.

18 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 5η Διάλεξη 4.3 Δείκτες και Απλά Συνδεδεμένες Λίστες Οι πίνακες και τα εγγραφήματα με χρήση υπολογισμών εντοπίζουν τα συνιστώντα στοιχεία τους. Οι πίνακες χρησιμοποιούν τις συναρτήσεις απεικόνισης με βάση τιμές δεικτών, ενώ τα εγγραφήματα προσθέτουν αποστάσεις (offsets) στη βασική διεύθυνση (base address) του εγγραφήματος. Οι συνδεδεμένες δομές (linked structures) ακολουθούν διαφορετική προσέγγιση. Κάθε στοιχείο της δομής δεδομένων όχι μόνο την τιμή του στοιχείου, αλλά και τις διευθύνσεις ενός ή περισσοτέρων άλλων στοιχείων δεδομένων. Τα πεδία που περιέχουν τις διευθύνσεις ονομάζονται πεδία δείκτη (δεικτών) (pointer fields). Η πιο απλή συνδεδεμένη δομή, είναι μία λίστα (list) στην οποία κάθε στοιχείο περιέχει τη διεύθυνση του επομένου στοιχείου Δείκτες Ένας δείκτης (pointer) είναι ένας τύπος δεδομένων του οποίου τιμές είναι η θέση των τιμών άλλων δεδομένων. Για παράδειγμα, αν καταγράψουμε τη διεύθυνσή μας σε ένα κομμάτι χαρτιού, το οποίο θα δώσουμε σε ένα γνωστό, το κομμάτι χαρτιού αποτελεί έναν δείκτη, η τιμή του οποίου είναι η θέση του σπιτιού μας. Στα υπολογιστικά συστήματα, η θέση αντικείμενων προσδιορίζεται με πολλούς τρόπους. Για παράδειγμα, τα δεδομένα μπορεί να βρίσκονται στο i-οστό εγγράφημα μιας λίστας ή στο j-οστό καταχωρητή της κεντρικής επεξεργαστικής μονάδας ή στη θέση (i, j) ενός δυσδιάστατου πίνακα. Οποιαδήποτε θέση (αφηρημένη, εικονική ή φυσική) μπορεί να αποτελεί την τιμή ενός δείκτη. Αφηρημένος Τύπος Δεδομένων Δείκτης Σύνολο τιμών: Οι τιμές είναι διευθύνσεις μνήμης (RAM), καθώς και η κενή τιμή (απροσδιόριστη τιμή) Λειτουργίες: Ανάθεση: := Συσχέτιση: = και < > Δυναμική: new και ispose

19 4.3.2 Μια απλά συνδεδεμένη λίστα Αφηρημένος Τύπος Δεδομένων Απλά Συνδεδεμένη Λίστα Στοιχεία: Τα στοιχεία είναι κόμβοι (nodes). Κάθε κόμβος περιέχει ένα δεδομένο και ένα δείκτη. Δομή: Η σχέση μεταξύ των κόμβων είναι γραμμική (όπως αυτή η έννοια ορίστηκε στην 3 η διάλεξη). Λειτουργίες: Αν η λίστα δεν είναι κενή, τότε ένας από τους κόμβους καθορίζεται ως ο τρέχων κόμβος (current node). Για την περιγραφή του αποτελέσματος μιας λειτουργίας, ορισμένες φορές απαιτείται αναφορά στη λίστα ή στον τρέχοντα κόμβο αμέσως πριν την εκτέλεση της λειτουργίας. Για τις αναφορές αυτές, θα χρησιμοποιούμε το συμβολισμό L pre (για τη λίστα) και c pre (για τον τρέχοντα κόμβο). Εκτός από τη λειτουργία create, όλες οι άλλες λειτουργίες υποθέτουν ότι υφίσταται κάποια λίστα. - insert (e: stdelement) post Ένας κόμβος που περιέχει το δεδομένο e γίνεται ο πρώτος κόμβος της λίστας και ο πρώτος κόμβος στη λίστα L pre (αν υπάρχει) αποτελεί τον αμέσως επόμενό του. Ο κόμβος που περιέχει το δεδομένο e γίνεται ο τρέχων κόμβος. Για τις λειτουργίες delete και find next, οι κόμβοι c prior και c next αναφέρονται στον προηγούμενο και στον επόμενο κόμβο του c pre. - delete pre Η λίστα δεν είναι κενή. post Ο κόμβος c pre δεν είναι στη λίστα. Αν ο κόμβος c pre ήταν ο πρώτος κόμβος, τότε ο κόμβος c next (αν υπάρχει) γίνεται ο πρώτος κόμβος, αλλιώς ο κόμβος c next (αν υπάρχει) γίνεται ο επόμενος του c prior. Αν η λίστα δεν είναι κενή, τότε ο τρέχων κόμβος γίνεται ο πρώτος κόμβος, αλλιώς ο τρέχων κόμβος δεν ορίζεται. retrieve (var e: stdelement) pre Η λίστα δεν είναι κενή. post Η μεταβλητή e περιέχει την τιμή του δεδομένου στον τρέχοντα κόμβο. update ( e: stdelement) pre Η λίστα δεν είναι κενή. post Ο κόμβος c pre περιέχει το e ως δεδομένο. findfirst pre Η λίστα δεν είναι κενή.

20 post O πρώτος κόμβος είναι ο τρέχων κόμβος. findnext (var fail: boolean) pre Η λίστα δεν είναι κενή. post Αν ο κόμβος c pre δεν ήταν ο τελευταίος κόμβος, τότε ο κόμβος c next γίνεται ο τρέχων κόμβος, αλλιώς η μεταβλητή fail λαμβάνει τιμή true. empty: boolean post Αν η λίστα δεν έχει κόμβους, τότε το αποτέλεσμα είναι true αλλιώς το αποτέλεσμα είναι false. create post Υπάρχει μία κενή συνδεδεμένη λίστα. Οι λειτουργίες insert, delete, update και retrieve αποτελούν την ομάδα των βασικών λειτουργιών (basic operations). Οι βασικές λειτουργίες επιδρούν στη λίστα με τρόπο που προσδιορίζεται από τον τρέχοντα κόμβο. Επομένως, απαιτούνται κάποιες λειτουργίες για τον προσδιορισμό του τρέχοντος κόμβου. Αυτές είναι οι findfirst και findnext. Μια τρίτη ομάδα λειτουργιών είναι αυτές που μας επιτρέπουν να ελέγχουμε προϋποθέσεις. Παράδειγμα τέτοιας λειτουργίας αποτελεί η λειτουργία empty, αλλά μπορεί κανείς να φανταστεί και πιο περίπλοκους ελέγχους προϋποθέσεων λειτουργιών. Τέλος, μια τέταρτη ομάδα λειτουργιών περιέχει λειτουργίες χρηστικότητας (utility operations). Παράδειγμα τέτοιας λειτουργίας αποτελεί η λειτουργία create, η οποία, κατ ουσίαν, αρχικοποιεί τη δομή δεδομένων. Διάγραμμα απλά συνδεδεμένης λίστας Οι συνδεδεμένες λίστες αποτελούν μία από τις απλούστερες και πλέον διαδεδομένες δομές δεδομένων που χρησιμοποιούν δείκτες και δυναμική ανάθεση

21 μνήμης (dynamic memory allocation). Οι συνδεδεμένες λίστες αποτελούν συχνά τις συνιστώσες περισσότερο περίπλοκων δομών δεδομένων. Για το σχεδιασμό συνδεδεμένων λιστών, χρειάζεται να γίνουν επιλογές που αφορούν: Τον τρόπο επισήμανσης των άκρων της λίστας Εξωτερικούς δείκτες που επιτρέπουν πρόσβαση στη λίστα και τους κόμβους στους οποίους θα δείχνουν Τον αριθμό των δεικτών κάθε κόμβου που δείχνουν προς συναφείς κόμβους. Οι επιλογές αυτές, αν και μεταξύ τους ανεξάρτητες, μπορούν να συνδυαστούν για να επιτύχουν αποδοτικότερες λίστες. Ας δούμε μερικές δυνατότητες. Σχεδόν πάντα θα υπάρχει ένας δείκτης κεφαλής (head pointer) της λίστας, που θα δείχνει προς τον πρώτο κόμβο. Από τον πρώτο κόμβο μπορεί να προσπελαστεί κάθε κόμβος της λίστας. Για τον εντοπισμό του τελευταίου κόμβου υπάρχουν διάφορες επιλογές. Μια συγκεκριμένη (μηδενική, nil) τιμή του δείκτη του τελευταίου κόμβου είναι μία απλή προσέγγιση, αλλά το αντίστοιχο κόστος εντοπισμού του τελευταίου κόμβου είναι υψηλό. Μια άλλη προσέγγιση χρησιμοποιεί ένα μετρητή του αριθμού όλων των κόμβων, στον οποίο ουσιαστικά καταγράφεται το μέγεθος της λίστας. Η πληροφορία στο μετρητή μας επιτρέπει να μεταβούμε στον τελευταίο κόμβο χωρίς να χρειαστεί να σαρώσουμε τη λίστα ολόκληρη από τον πρώτο κόμβο. Μια τρίτη προσέγγιση χρησιμοποιεί έναν δείκτη ο οποίος δείχνει πάντα προς τον τελευταίο κόμβο της λίστας (tail pointer). Αποθηκεύοντας και ενημερώνοντας μόνο έναν ακόμη δείκτη, έχουμε άμεση προσπέλαση στον τελευταίο κόμβο της λίστας, γεγονός που δεν επιτρέπουν οι προηγούμενες δύο προσεγγίσεις. Μια κυκλική συνδεδεμένη λίστα (circular linked list) είναι μια λίστα στην οποία ο δείκτης ουράς δείχνει προς τον πρώτο κόμβο της λίστας, δηλαδή έχει την ίδια τιμή με το δείκτη κεφαλής της λίστας. Οι έννοιες της κεφαλής (πρώτου κόμβου) και της ουράς (τελευταίου κόμβου) χάνουν το νόημά τους. Γενικά, δείκτες που μας επιτρέπουν την προσπέλαση σε ένα τουλάχιστον κόμβο μιας λίστας ονομάζονται δείκτες προσπέλασης (access pointers). Τέτοιοι δείκτες μπορεί να είναι ο δείκτης κεφαλής ή ο δείκτης ουράς ή ο δείκτης τρέχοντος κόμβου μιας λίστας. Στις απλά συνδεδεμένες λίστες (simply linked lists), αντιστοιχεί ένας δείκτης σε κάθε κόμβο. Στις λίστες αυτές απαιτείται ένας δείκτης κεφαλής και η λίστα μπορεί να σαρωθεί μόνο προς μια κατεύθυνση. Για να προσπελαστεί ένας οποιοσδήποτε κόμβος της λίστας, πρέπει να προσπελαστούν όλοι οι προηγούμενοι κόμβοι, από τον πρώτο μέχρι τον επιθυμητό. Αυτό δεν αποτελεί πάντα την πιο αποτελεσματική διαδικασία.

22 Αν σε κάθε κόμβο προστεθεί ένας δεύτερος δείκτης που δείχνει προς τον προηγούμενο κόμβο, τότε δημιουργείται μια διπλά συνδεδεμένη λίστα (doubly linked list). Η διπλά συνδεδεμένη λίστα είναι πιο αποτελεσματική ως προς το χρόνο εκτέλεσης λειτουργιών αν και απαιτεί περισσότερο χώρο μνήμης για να αποθηκευτεί. Πραγματικά, για να προσπελαστεί ο αμέσως προηγούμενος κόμβος του τρέχοντος σε μια απλή συνδεδεμένη λίστα χρειάζεται επιστροφή στον πρώτο κόμβο και σάρωση της λίστας μέχρι τον επιθυμητό κόμβο. Αντίστοιχα, στη διπλά συνδεδεμένη λίστα αυτό γίνεται άμεσα. Διάγραμμα διπλά συνδεδεμένης λίστας Στη διπλά συνδεδεμένη λίστα, η διάταξη των κόμβων με βάση τον ένα δείκτη αποτελεί το λογικό αντίστροφο της διάταξης των κόμβων με βάση τον άλλο δείκτη. Αυτό δεν είναι πάντα αναγκαίο. Αν ο δεύτερος δείκτης προκαλεί μια διάταξη των κόμβων άσχετη προς τη διάταξη που προκαλεί ο πρώτος δείκτης, τότε έχουμε μια πολλαπλά συνδεδεμένη λίστα τάξης δύο (multi linked list of order two). Γενικότερα βέβαια, αν σε κάθε κόμβο αντιστοιχούν πολλοί δείκτες, τότε έχουμε μια πολλαπλά συνδεδεμένη λίστα οποιασδήποτε τάξης.

23 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 6η Διάλεξη 4.4 Σύνθετες Δομές Δεδομένων Οι πίνακες, τα εγγραφήματα και οι απλά συνδεδεμένες λίστες είναι πολύ χρήσιμες δομές δεδομένων και καθίστανται ακόμα περισσότερο χρήσιμες όταν συνδυάζονται. Πολλές δομές δεδομένων χρησιμοποιούν τους πίνακες, τα εγγραφήματα και συνδυασμούς τους ως δομικές μονάδες. Δυναμικά εγγραφήματα διασυνδεδεμένα με δείκτες αποτελούν τη βάση για μια μεγάλη ποικιλία συνδεδεμένων δομών δεδομένων. Οι πίνακες εγγραφημάτων, αν και είναι στατικές δομές δεδομένων, αποτελούν αποτελεσματικούς τρόπους οργάνωσης δεδομένων για ταχεία ανάκτηση. Συνηθισμένα είναι και τα εγγραφήματα των οποίων τα πεδία είναι πίνακες. Οι πίνακες δεικτών προσφέρουν μια ευελιξία που δεν προσφέρουν οι πίνακες που περιέχουν στοιχειώδη δεδομένα. Θα δούμε στη συνέχεια κάποιες από αυτές τις δομές δεδομένων με μεγαλύτερη λεπτομέρεια Εγγραφήμτα Πινάκων Έχουμε δει διάφορα παραδείγματα στα οποία πίνακες χρησιμοποιούνται ως πεδία εγγραφημάτων. Κάθε φορά που μια επαναλαμβανόμενη ομάδα δεδομένων εμφανίζεται σε διαδοχικά πεδία ενός εγγραφήματος έχουμε ένα εγγράφημα πινάκων. Με τον ίδιο τρόπο μπορούμε να διαχειριστούμε πολλά επίπεδα εμφώλευσης (nesting). Ένα απλό παράδειγμα αναλύεται στο επόμενο σχήμα: var r: record event: array [1..10] of char; place: array [1..20] of record plname:array [1..15] of char; date: array [1..15] of record ano: 1..12; day: 1..31; year:integer; end end end;

24 Εγγράφημα r Πίνακας Event 1 ος επιτραπέζιος πίνακας place 1 ος χαρακτήρας Πίνακας plname επιτραπέζιος πίνακας date 2 ος χαρακτήρας 1 ος χαρακτήρας 1 ο εγγράφημα 2 ος χαρακτήρας μήνας μέρα έτος 2 ο εγγράφημα μήνας μέρα έτος... 5 ο εγγράφημα 15 ος χαρακτήρας μήνας μέρα έτος 2 ος επιτραπέζιος πίνακας place 10 ος χαρακτήρας Πίνακες εγγραφημάτων Μια συνηθισμένη σύνθετη δομή δεδομένων είναι ένας μονοδιάστατος πίνακας εγγραφημάτων. Τη δομή αυτή την ονομάζουμε επιτραπέζιο πίνακα (table). Ένα παράδειγμα επιτραπέζιου πίνακα είναι το επόμενο: Κατασκευαστής Σύστημα Τύπος συστήματος DEC VAX 11/780 Mini IBM PC Micro IBM 3033 Maxi Apple Lisa Micro Πίνακας Δεικτών

25 Ένα συνηθισμένο πρόβλημα είναι αυτό της αποθήκευσης σε ένα πίνακα στοιχειωδών δεδομένων μεταβλητού μήκους. Είδαμε σε προηγούμενη διάλεξη έναν τύπο που προσδιορίζει τη συνάρτηση απεικόνισης για πίνακα σταθερού μήκους στοιχείων. Αν κάθε στοιχείο του πίνακα μπορεί να έχει το δικό του μήκος και, ίσως, το μήκος αυτό επιτρέπεται να μεταβάλλεται με το χρόνο, τότε ο πίνακας δεν αποτελεί μια αποτελεσματική δομή δεδομένων. Μια λύση στο παραπάνω πρόβλημα είναι να μην αποθηκεύονται οι πραγματικές τιμές των δεδομένων μεταβλητού μήκους στον πίνακα, αλλά να αποθηκεύονται τιμές δεικτών προς τις τιμές των δεδομένων. Με τον τρόπο αυτό εισάγουμε ένα επίπεδο εμμεσότητας (level of indirection). Ο υπολογισμός της συνάρτησης απεικόνισης πίνακα δεν παράγει τη διεύθυνση ενός στοιχειώδους δεδομένου, αλλά παράγει τη διεύθυνση στην οποία είναι αποθηκευμένη η διεύθυνση του στοιχειώδους δεδομένου. Το σημαντικό εδώ είναι ότι οι δείκτες είναι δεδομένα σταθερού μήκους, ενώ τα στοιχειώδη δεδομένα στα οποία δείχνουν δεν έχουν σταθερό μήκος. Αποθηκεύοντας τιμές δεικτών σταθερού μήκους στον πίνακα επανακτούμε το πλεονέκτημα της δυνατότητας κατασκευής μιας αποτελεσματικής συνάρτησης απεικόνισης πίνακα. Ας δούμε ένα παράδειγμα, στο οποίο ένας πίνακας με το όνομα head είναι ένας πίνακας δεικτών. Δηλαδή, τα στοιχεία του πίνακα head είναι οι τιμές ενός δείκτη. Κάθε τιμή δείκτη (στοιχείο του πίνακα) αποτελεί την τιμή του δείκτη κεφαλής μιας αντίστοιχης συνδεδεμένης λίστας. Θεωρούμε τα δεδομένα κάθε μιας συνδεδεμένης λίστας ως μια ενιαία οντότητα, δηλαδή ως στοιχειώδη δεδομένα. Ας υποθέσουμε ότι σε κάθε συνδεδεμένη λίστα αποθηκεύονται ονόματα ανθρώπων. Η μέθοδος που χρησιμοποιεί πίνακες δεικτών, όπως παρουσιάστηκε προηγουμένως, μπορεί να υλοποιήσει σχεδόν οποιαδήποτε δομή δεδομένων μεταβλητού μήκους. Η χρήση πινάκων δεικτών έχει και άλλη μια σημαντική ιδιότητα: Μας επιτρέπει να οργανώνουμε δεδομένα και να τα διατάσσουμε με περισσότερους του ενός τρόπους (βάσει περισσοτέρων του ενός κριτηρίων) χωρίς να επαναλαμβάνουμε τα

26 δεδομένα. Στην περίπτωση αυτή, οι αντίστοιχοι πίνακες δεικτών ονομάζονται κατάλογοι (indexes) των δεδομένων. Ας δούμε το παράδειγμα των φακέλων των φοιτητών του μαθήματος αυτού. Σε περιπτώσεις μεγάλου όγκου δεδομένων (π.χ., μεγάλου αριθμού εγγραφημάτων που αφορούν φακέλους φοιτητών) είναι δυνατόν να εισαχθούν και υψηλότερα επίπεδα εμμεσότητας. Αυτό επιτυγχάνεται αν δημιουργηθεί ένας κατάλογος (πίνακας δεικτών) που δείχνει προς τις διευθύνσεις όπου βρίσκονται αποθηκευμένοι διάφοροι επιμέρους κατάλογοι (π.χ. κατάλογος για αριθμούς μητρώου από 1-100, κατάλογος για αριθμούς μητρώου από , κ.ο.κ.). Στην περίπτωση αυτή, η προσπέλαση των δεδομένων γίνεται ως εξής: από τις τιμές των στοιχείων του κύριου πίνακα προσπελαύνεται ο αντίστοιχος επί μέρους κατάλογος. Από τις τιμές των στοιχείων αυτού του επί μέρους καταλόγου προσπευλάνονται τα δεδομένα.

27 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 7η Διάλεξη 5. Στίβες και ουρές Οι τρεις αφηρημένοι τύποι δεδομένων που εξετάσαμε ως εδώ είναι τύποι σχετικά χαμηλού επιπέδου αφαίρεσης. Οι πίνακες και τα εγγραφήματα εμφανίζονται ως ενσωματωμένες δομές σε πολλές γλώσσες προγραμματισμού, ενώ, με τη βοήθεια δεικτών και δυναμικής ανάθεσης μνήμης, πολλές γλώσσες προγραμματισμού επιτρέπουν τη δημιουργία και διαχείριση συνδεδεμένων δομών δεδομένων. Οι πίνακες, τα εγγραφήματα και οι δείκτες αποτελούν τα δομικά στοιχεία για την υλοποίηση δομών δεδομένων με υψηλότερο επίπεδο αφαίρεσης. Δύο τέτοιες δομές δεδομένων με υψηλότερο επίπεδο αφαίρεσης είναι οι στίβες (stacks) και οι ουρές (queues). Η στίβα είναι μια δομή δεδομένων της οποίας οι βασικές ιδιότητες προσδιορίζονται από τους κανόνες εισαγωγής και διαγραφής των στοιχείων της. Το μόνο στοιχείο της δομής δεδομένων που μπορεί να διαγραφεί ή να απομακρυνθεί είναι αυτό που εισήχθη πιο πρόσφατα. Επομένως, μια τέτοια δομή δεδομένων έχει μια συμπεριφορά (ακολουθεί ένα πρωτόκολλο) του τύπου τελευταίο-μέσα/πρώτο-έξω (last-in/first-out, LIFO). Η απλότητα της δομής δεδομένων του τύπου της στίβας δεν εκφράζει τη μεγάλη σημασία της. Σε πολλά υπολογιστικά συστήματα, έχουν ενσωματωθεί στίβες στα κυκλώματά τους και τις στίβες αυτές διαχειρίζονται εντολές επιπέδου γλώσσας μηχανής. Η ακολουθία των κλήσεων προς υπορουτίνες και των επιστροφών από υπορουτίνες βασίζεται σε ένα πρωτόκολλο στίβας. Επίσης, διάφορες αριθμητικές εκφράσεις υπολογίζονται συχνά ως μια ακολουθία λειτουργιών σε μια στίβα. Για παράδειγμα, τα κομπουτεράκια χειρός χρησιμοποιούν στίβες. Από την άλλη πλευρά, οι ουρές είναι πολύ συνηθισμένες στην καθημερινή ζωή. Παραδείγματα ουρών αποτελούν οι γραμμές που σχηματίζουν οι πελάτες μπροστά στο γκισέ μιας τράπεζας ή τα αυτοκίνητα μπροστά σε ένα φανάρι. Το κύριο χαρακτηριστικό των ουρών είναι ο κανόνας πρώτης-προσέλευσης/πρώτηςεξυπηρέτησης (first-come/first served) που ακολουθούν. Αντίθετα με τη στίβα, στην οποία το στοιχείο που εισήχθη τελευταίο είναι αυτό που απομακρύνεται ή εξυπηρετείται πρώτο, στην ουρά εξυπηρετείται πρώτο το πλέον πρώιμο στοιχείο. Υπάρχουν πολλές εφαρμογές του πρωτοκόλλου πρώτου-μέσα/πρώτου-έξω (first-in/first-out, FIFO) στα υπολογιστικά συστήματα. Για παράδειγμα, η γραμμή των

28 αιτήσεων για πρόσβαση στο δίσκο ενός υπολογιστικού συστήματος πολλών χρηστών με καταμερισμό του χρόνου (multinser time-sharing system) μπορεί να αποτελεί μια ουρά. Ομοίως, η γραμμή των υπολογιστικών εργασιών που περιμένουν να τρέξουν σε ένα υπολογιστικό σύστημα μπορεί να αποτελεί μια ουρά. Στις ουρές αυτές, η εξυπηρέτηση παρέχεται με βάση το πρωτόκολλο FIFO. Υπάρχει, όμως, και ένα ακόμα σημαντικό είδος ουράς. Ένα παράδειγμα αυτού του τύπου ουράς εμφανίζεται στο χώρο εκτάκτων περιστατικών ενός νοσοκομείου. Εκεί, συνήθως, δίνεται προτεραιότητα στους βαρύτερα τραυματισμένους ασθενείς με τις περισσότερες πιθανότητες επιβίωσης. Εναλλακτικά (και αυτό ίσως ακολουθείται ακόμα σε κάποιες κοινωνίες), θα μπορούσε να εκχωρείται προτεραιότητα με βάση την κοινωνική θέση των τραυματιών. Στα υπολογιστικά συστήματα, τα συμβάντα που απαιτούν την προσοχή του συστήματος αντιμετωπίζονται με βάση ένα πρωτόκολλο σημαντικότερουσυμβάντος/εξυπηρετούμενου-πρώτου (most-important-event/first-served) ή ύψιστηςπροτεραιότητας-μέσα/πρώτου-έξω (highest-priority-in/first-out, HPIFO). Οι αντίστοιχες ουρές ονομάζονται ουρές προτεραιότητας (priority queues) και η εξυπηρέτηση σε αυτές δεν γίνεται με βάση το χρόνο άφιξης, αλλά με βάση κάποιο μέτρο προτεραιότητας. 5.1 Στίβες τύπου LIFO Όπως αναφέραμε, η στίβα είναι μια δομή δεδομένων που ακολουθεί το πρωτόκολλο LIFO. Γενικά, μπορούν να εισάγονται στοιχεία στη στίβα. Όμως, το μόνο στοιχείο το οποίο μπορεί να ανακτηθεί ή να διαγραφεί από τη στίβα είναι το στοιχείο το οποίο εισήχθη στη στίβα πιο πρόσφατα. Όταν διαγραφεί από τη στίβα το πιο πρόσφατα εισηγμένο στοιχείο της, τότε το χρονικά αμέσως επόμενο εισηγμένο στοιχείο της γίνεται το πιο πρόσφατα εισηγμένο στοιχείο της στίβας. Η λειτουργία της εισαγωγής στοιχείων στη στίβα ονομάζεται λειτουργία push, ενώ η λειτουργία της διαγραφής του πιο πρόσφατα εισηγμένου στοιχείου της στίβας ονομάζεται λειτουργία pop. Παράδειγμα : Ακολουθία λειτουργιών στίβας για υπολογισμό της έκφρασης 10 x (5+7). Υποθέτουμε ότι οι αριθμητικές λειτουργίες πρόσθεσε και πολλαπλασίασε εξάγουν (pop), πρώτα τα δύο στοιχεία από τη στίβα, στη συνέχεια τα προσθέτουν και εισάγουν (push), το αποτέλεσμα στη στίβα. Συγκεκριμένα, έχουμε το επόμενο σχήμα. Το τελικό αποτέλεσμα (10 x (5+7) = 120) αποθηκεύεται ως το στοιχείο στην κορυφή της στίβας. Αυτός ο απλός μηχανισμός, ενισχυμένος και με άλλες αριθμητικές λειτουργίες, μπορεί να υπολογίσει οποιαδήποτε αριθμητική έκφραση.

29 push 5 push 7 πρόσθεσε (add) (pop, pop, add, push) push 10 πολλαπλασίασε (multiply) (pop, pop, multiply, push)

30 Ας δούμε στη συνέχεια τον αυστηρό ορισμό της δομής δεδομένων Στίβα LIFO. Αφηρημένος τύπος δεδομένων Στίβα LIFO Στοιχεία: Τα στοιχεία μιας στίβας LIFO μπορεί να προέρχονται από μια ποικιλία τύπων. Υποθέτουμε για απλότητα ότι είναι ομογενή και μάλιστα ενός τύπου stdelement. Δομή: Η δομή είναι ένας μηχανισμός που επιτρέπει να συσχετίζονται τα δεδομένα με βάση τη χρονική σειρά εισαγωγής τους στη στίβα. Κατά κάποιον τρόπο, η δομή τοποθετεί χρονο-σφραγίδες (time stamps) στα δεδομένα. Λειτουργίες: 1.push (e: stdelement) pre Η στίβα δεν είναι πλήρης. post Η στίβα περιέχει το στοιχείο e ως πιο πρόσφατα εισηγμένο στοιχείο της. 2.pop (var e: stdelement) pre H στίβα δεν είναι κενή. post Tο στοιχείο e, το οποίο αποτελούσε το πιο πρόσφατα εισηγμένο στοιχείο της στίβας, δεν περιέχεται πλέον στη στίβα. 3.empty: boolean post Αν η στίβα δεν περιέχει καθόλου στοιχεία, τότε το empty είναι true, αλλιώς το empty είναι false. 4. full: boolean post Αν η λίστα έχει φτάσει το μέγιστο επιτρεπτό μέγεθός της, τότε το full είναι true, αλλιώς το full είναι false. 5. clear post Η στίβα είναι κενή. 6. create post Η στίβα υπάρχει και είναι κενή. Άλλες αρκετά συνηθισμένες λειτουργίες στιβών είναι η top και η retrieve. Η πρώτη μοιάζει με την pop αλλά δεν διαγράφει το κορυφαίο στοιχείο της στίβας. Η retrieve επιτρέπει την ανάκτηση και άλλων στοιχείων της στίβας, εκτός του πλέον πρόσφατου Υλοποίηση στίβας με πίνακα

31 Ένας τρόπος υλοποίησης (αναπαράστασης) μιας στίβας είναι με χρήση πίνακα. Η εισαγωγή στοιχείων της στίβας αρχίζει από την πρώτη θέση του πίνακα (ελάχιστη επιτρεπτή τιμή δείκτη) και συνεχίζεται μέχρι την τελευταία διαθέσιμη θέση στον πίνακα (μέγιστη επιτρεπτή τιμή δείκτη). Δεν απαιτείται η τήρηση χρονοσφραγίδων, καθώς η χρονική σειρά εισαγωγής στοιχείων στη στίβα προκύπτει από τη θέση τους στον πίνακα. Με τον τρόπο αυτό γίνεται εξοικονόμηση μνήμης καθώς ο δείκτης του πίνακα αποτελεί το μηχανισμό προσδιορισμού της σειράς εισαγωγής στοιχείων στη στίβα. Μεγαλύτερη εξοικονόμηση μνήμης επιτυγχάνεται αποθηκεύοντας δύο στίβες στον ίδιο πίνακα. Στην περίπτωση αυτή, η μια στίβα μεγαλώνει από την ελάχιστη προς τη μέγιστη τιμή του δείκτη του πίνακα, ενώ η άλλη στίβα μεγαλώνει απο τη μέγιστη προς την ελάχιστη τιμή του δείκτη του πίνακα Υλοποίηση στίβας με συνδεδεμένη λίστα. Η υλοποίηση στίβας με συνδεδεμένη λίστα έχει το πλεονέκτημα της δυναμικής ανάθεσης μνήμης (π.χ. με τις διαδικασίες new και dispose στην Pascal). Η επιλογή απλά ή διπλά συνδεδεμένης λίστας) έχει μικρή σημασία στην υλοποίηση μιας στίβας, καθώς επηρεάζει μόνο τις λειτουργίες push και pop. Για να επισημάνουμε το στοιχείο της λίστας που εισήχθη πρώτο, μπορούμε να συμφωνήσουμε ο δείκτης του κόμβου του να έχει τιμή nil. Για την επισήμανση του πλέον πρόσφατα εισηγμένου στοιχείου της στίβας μπορούμε να χρησιμοποιήσουμε έναν δείκτη πρόσβασης με όνομα top. Οι χρονο-σφραγίδες της σειράς εισαγωγής των στοιχείων της στίβας υλοποιούνται μέσω των τιμών των δεικτών των κόμβων τους.

32 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 8η Διάλεξη 5.2 Ουρές τύπου FIFO Όπως ήδη αναφέραμε, η ουρά είναι ένας τύπος δεδομένων που ακολουθεί ένα πρωτόκολλο FIFO. Στην ουρά μπορούν να εισάγονται στοιχεία, αλλά το μόνο στοιχείο που μπορεί να ανακτηθεί ή να διαγραφεί από την ουρά είναι εκείνο το στοιχείο που εισήχθη το λιγότερο πρόσφατα. Αν διαγραφεί το στοιχείο με την πιο πρώιμη εισαγωγή στην ουρά, τότε το αμέσως επόμενό του χρονικά καθίσταται εκείνο το στοιχείο που εισήχθη στην ουρά το λιγότερο πρόσφατα. Η λειτουργία της εισαγωγής ενός στοιχείου στην ουρά ονομάζεται στην αγγλική enqueuing, ενώ η ανάκτηση ενός στοιχείου από την ουρά και η διαγραφή του ονομάζεται εξυπηρέτηση (service). Για παράδειγμα, ας θεωρήσουμε την ουρά που σχηματίζεται μπροστά από έναν ταμία τράπεζας από πελάτες που περιμένουν να εξυπηρετηθούν. Οι θέσεις των πελατών στην ουρά είναι ενδεικτικές της χρονικής σειράς με την οποία προσήλθαν στην τράπεζα. Ο πελάτης που βρίσκεται πλησιέστερα προς τον ταμία και, επομένως, στέκεται στην κεφαλή της ουράς, είναι αυτός που προσήλθε πρώτος. Ο πελάτης που βρίσκεται στην πιο απομακρυσμένη θέση από τον ταμία και επομένως, στέκεται στο τέλος της ουράς, είναι αυτός που προσήλθε τελευταίος στην τράπεζα. Καθώς προσέρχονται πελάτες στην τράπεζα, πηγαίνουν στο τέλος της ουράς, ενώ η εξυπηρέτηση γίνεται από την αρχή της ουράς. Ένα άλλο σύστημα ουρών, που χρησιμοποιείται αρκετά συχνά, είναι αυτό στο οποίο υπάρχουν πολλοί ταμίες για να εξυπηρετήσουν τους πελάτες μιας τράπεζας. Κάθε προσερχόμενος πελάτης λαμβάνει έναν αριθμό. Ένας πελάτης που προσήλθε νωρίτερα από κάποιον άλλο λαμβάνει μικρότερο αριθμό από το δεύτερο. Καθώς

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται

Διαβάστε περισσότερα

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

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη

Διαβάστε περισσότερα

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

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ Τα δεδομένα (data) είναι η αφαιρετική αναπαράσταση της πραγματικότητας και συνεπώς μία απλοποιημένη όψη της. Η συλλογή των ακατέργαστων δεδομένων και ο συσχετισμός

Διαβάστε περισσότερα

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( ) Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

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

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ 2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ Προκειμένου να επιτευχθεί η «ακριβής περιγραφή» ενός αλγορίθμου, χρησιμοποιείται κάποια γλώσσα που μπορεί να περιγράφει σειρές ενεργειών με τρόπο αυστηρό,

Διαβάστε περισσότερα

Παρακάτω θα δούμε πιο αναλυτικά τον καθένα από αυτούς.

Παρακάτω θα δούμε πιο αναλυτικά τον καθένα από αυτούς. ΤΥΠΟΙ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 1. Γενικά Κάθε δεδομένο που υπόκειται σε επεξεργασία από ένα πρόγραμμα ( δηλαδή τελικά από έναν ηλεκτρονικό υπολογιστή) έχει τον δικό του τύπο. Ο τύπος αυτός μπορεί να είναι σύνθετος

Διαβάστε περισσότερα

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ Ενότητα 7: Αφαίρεση δεδόμενων Πασχαλίδης Δημοσθένης Τμήμα Διαχείρισης Εκκλησιαστικών Κειμηλίων Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας ΚΕΦΑΛΑΙΟ 8: Αφηρηµένοι τύποι δεδοµένων 8.1 οµές δεδοµένων (data structures) 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας Αδόµητα δεδοµένα οδός Ζέας

Διαβάστε περισσότερα

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

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες Δομές δεδομένων Πίνακες Οι πίνακες είναι το πιο απλό «μέσο» αποθήκευσης ομοειδούς πληροφορίας. Χρησιμοποιούν ακριβώς όση μνήμη χρειάζεται για την αποθήκευση της πληροφορίας Επιτρέπουν την προσπέλαση άμεσα

Διαβάστε περισσότερα

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΚΕΦΑΛΑΙΑ 3 και 9 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΕΣ Δεδομένα αφαιρετική αναπαράσταση της πραγματικότητας και συνεπώς μία απλοποιημένη όψη της δηλαδή.

Διαβάστε περισσότερα

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

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Γραμμικές Λίστες Βασικές Έννοιες Βασικές Έννοιες. Αναπαράσταση με τύπο και με δείκτη. Γραμμικές Λίστες. Βασικές Λειτουργίες. Δομές Δεδομένων: Βασικές Έννοιες Αντικείμενο

Διαβάστε περισσότερα

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

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης Σύνοψη Προηγούμενου Λίστες (Lists) Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς Στοίβες (Stacks) : στην κορυφή της στοίβας ( ) από την κορυφή της στοίβας ( ) Ουρές

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Εισαγωγή. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Βιβλιογραφία Robert Sedgewick, Αλγόριθμοι σε C, Μέρη 1-4 (Θεμελιώδεις Έννοιες, Δομές Δεδομένων, Ταξινόμηση,

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 2. Πίνακες 45 23 28 95 71 19 30 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 21/10/2016

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

Ταξινομώντας τον πίνακα σε φθίνουσα σειρά ως προς τις πωλήσεις, μπορούμε να δούμε ποιοι ήταν οι καλύτεροι πωλητές. Ζωή Μάνος Δημήτρης Κατερίνα Γιάννα Πωλήσεις Μαρτίου Πωλητής Πωλήσεις (χιλιάδες κουτιά)

Διαβάστε περισσότερα

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM). Μνήμες Ένα από τα βασικά πλεονεκτήματα των ψηφιακών συστημάτων σε σχέση με τα αναλογικά, είναι η ευκολία αποθήκευσης μεγάλων ποσοτήτων πληροφοριών, είτε προσωρινά είτε μόνιμα Οι πληροφορίες αποθηκεύονται

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος 2012-13 Κων/νος Φλώρος Απλοί τύποι δεδομένων Οι τύποι δεδομένων προσδιορίζουν τον τρόπο παράστασης των

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 2. Πίνακες 45 23 28 95 71 19 30 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 12/10/2017

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Σχετικές έννοιες 8.3 Υλοποίηση δοµών δεδοµένων 8.4 Μια σύντοµη µελέτη περίπτωσης 8.5 Προσαρµοσµένοι τύποι δεδοµένων 1 Βασικές δοµές

Διαβάστε περισσότερα

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

Στοίβες με Δυναμική Δέσμευση Μνήμης ΕΠΛ 231 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ 10/02/10 Παύλος Αντωνίου Στοίβες με Δυναμική Δέσμευση Μνήμης Στοίβα: Στοίβα είναι μια λίστα που έχει ένα επιπλέον περιορισμό. Ο περιορισμός είναι ότι οι εισαγωγές

Διαβάστε περισσότερα

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Η ΓΛΩΣΣΑ PASCAL ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Απλοί ή στοιχειώδης Τ.Δ. Ακέραιος τύπος Πραγματικός τύπος Λογικός τύπος Χαρακτήρας Σύνθετοι Τ.Δ. Αλφαριθμητικός 1. Ακέραιος (integer) Εύρος: -32768 έως 32767 Δήλωση

Διαβάστε περισσότερα

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

Ενδεικτικές Ερωτήσεις Θεωρίας Ενδεικτικές Ερωτήσεις Θεωρίας Κεφάλαιο 2 1. Τι καλούμε αλγόριθμο; 2. Ποια κριτήρια πρέπει οπωσδήποτε να ικανοποιεί ένας αλγόριθμος; 3. Πώς ονομάζεται μια διαδικασία που δεν περατώνεται μετά από συγκεκριμένο

Διαβάστε περισσότερα

Κεφάλαιο 4 ο. Ο Προσωπικός Υπολογιστής

Κεφάλαιο 4 ο. Ο Προσωπικός Υπολογιστής Κεφάλαιο 4 ο Ο Προσωπικός Υπολογιστής Μάθημα 4.3 Ο Επεξεργαστής - Εισαγωγή - Συχνότητα λειτουργίας - Εύρος διαδρόμου δεδομένων - Εύρος διαδρόμου διευθύνσεων - Εύρος καταχωρητών Όταν ολοκληρώσεις το μάθημα

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX Μάθημα: Λειτουργικά Συστήματα Συστήματα Αρχείων Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης (clam@unipi.gr) Δρ. Α. Γαλάνη (agalani@unipi.gr) Λειτουργικά Συστήματα 1 Αρχεία με Χαρτογράφηση

Διαβάστε περισσότερα

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης Σύνοψη Προηγούμενου Πίνακες (Arrays Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς Διαδικαστικά θέματα. Aντικείμενο Μαθήματος. Aντικείμενα, Κλάσεις, Μέθοδοι, Μεταβλητές.

Διαβάστε περισσότερα

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

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι Αραποστάθης Μάριος Καθηγητής Πληροφορικής Πειραματικού Λυκείου Βαρβακείου http://users.sch.gr/mariosarapostathis

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Αφηρημένες

Διαβάστε περισσότερα

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

Πληροφορική 2. Δομές δεδομένων και αρχείων Πληροφορική 2 Δομές δεδομένων και αρχείων 1 2 Δομή Δεδομένων (data structure) Δομή δεδομένων είναι μια συλλογή δεδομένων που έχουν μεταξύ τους μια συγκεκριμένη σχέση Παραδείγματα δομών δεδομένων Πίνακες

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07 Τμήμα θεωρίας: Α.Μ. 8, 9 Κάθε Πέμπτη, 11πμ-2μμ, ΑΜΦ23. Διδάσκων: Ντίνος Φερεντίνος Γραφείο 118 email: kpf3@cornell.edu Μάθημα: Θεωρία + προαιρετικό

Διαβάστε περισσότερα

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αφηρημένοι Τύποι Δεδομένων (ΑΤΔ) Οι ΑΤΔ Στοίβα και Ουρά Υλοποίηση των ΑΤΔ Στοίβα και Ουρά ΕΠΛ231 Δομές Δεδομένων

Διαβάστε περισσότερα

Standard Template Library (STL) C++ library

Standard Template Library (STL) C++ library Τ Μ Η Μ Α Μ Η Χ Α Ν Ι Κ Ω Ν Η / Υ Κ Α Ι Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Standard Template Library (STL) C++ library Δομές Δεδομένων Μάριος Κενδέα kendea@ceid.upatras.gr Εισαγωγή Η Standard Βιβλιοθήκη προτύπων

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 8 η Δείκτες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

Διαβάστε περισσότερα

Εισαγωγή στην Αριθμητική Ανάλυση

Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στη MATLAB ΔΙΔΑΣΚΩΝ: ΓΕΩΡΓΙΟΣ ΑΚΡΙΒΗΣ ΒΟΗΘΟΙ: ΔΗΜΗΤΡΙΑΔΗΣ ΣΩΚΡΑΤΗΣ, ΣΚΟΡΔΑ ΕΛΕΝΗ E-MAIL: SDIMITRIADIS@CS.UOI.GR, ESKORDA@CS.UOI.GR Τι είναι Matlab Είναι ένα περιβάλλον

Διαβάστε περισσότερα

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

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 Κεφάλαιο 2 Δοµές Δεδοµένων Ι Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1 Δοµές Δεδοµένων Ι Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη

Διαβάστε περισσότερα

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Εισαγωγή στις έννοιες Αλγόριθµοι και Πολυπλοκότητα, Οργάνωση Δεδοµένων και Δοµές Δεδοµένων Χρήσιµοι µαθηµατικοί

Διαβάστε περισσότερα

διανύσματα - Πίνακες - Struct Στατικό διάνυσμα Είσοδος Έξοδος δεδομένων Συναρτήσεις Χειρισμός σφαλμάτων ΤΕΤΑΡΤΗ ΔΙΑΛΕΞΗ

διανύσματα - Πίνακες - Struct Στατικό διάνυσμα Είσοδος Έξοδος δεδομένων Συναρτήσεις Χειρισμός σφαλμάτων ΤΕΤΑΡΤΗ ΔΙΑΛΕΞΗ ΤΕΤΑΡΤΗ ΔΙΑΛΕΞΗ Σύνολο στοιχείων ίδιου τύπου (1/2) Ένα σύνολο στοιχείων ίδιου τύπου διακρίνεται σε δύο κατηγορίες με βάση τη διάσταση: Μονοδιάστατο Αν μπορούμε να θεωρούμε ότι τα στοιχεία είναι συνεχόμενα

Διαβάστε περισσότερα

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

Διαβάστε περισσότερα

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 3ο: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΜΕΡΟΣ 2 ο : ΣΤΟΙΒΑ & ΟΥΡΑ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ ΣΤΟΙΒΑ 2 Μια στοίβα

Διαβάστε περισσότερα

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2 Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2 1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων Πληροφορικής 2. Ο αλγόριθμος αποτελείται από ένα πεπερασμένο σύνολο εντολών 3. Ο αλγόριθμος

Διαβάστε περισσότερα

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Βάσεις Δεδομένων Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Στέργιος Παλαμάς, Υλικό Μαθήματος «Βάσεις Δεδομένων», 2015-2016 Κεφάλαιο 2: Περιβάλλον Βάσεων Δεδομένων Μοντέλα Δεδομένων 2.1

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ÊÁËÁÌÁÔÁ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ÊÁËÁÌÁÔÁ ΘΕΜΑ Α ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ Α1. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-5 και, δίπλα,

Διαβάστε περισσότερα

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

Βασικές Δομές Δεδομένων Βασικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αφηρημένοι Τύποι Δεδομένων Οι ΑΤΔ Στοίβα και Ουρά Υλοποίηση των ΑΤΔ Στοίβα και Ουρά με Διαδοχική και Δυναμική Χορήγηση

Διαβάστε περισσότερα

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο Γιώργος Δημητρίου Μάθημα 9 ο Ενδιάμεσος Κώδικας Απεικόνιση ανάμεσα στον αρχικό και στον τελικό κώδικα Γραμμικές αναπαραστάσεις: Ενδιάμεσος κώδικας πλησιέστερα στον τελικό ευκολότερη παραγωγή τελικού κώδικα

Διαβάστε περισσότερα

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΔΕΔΟΜΕΝΑ ΑΛΓΟΡΙΘΜΟΙ -ΠΛΗΡΟΦΟΡΙΑ: Δεδομένα: Αναπαράσταση της Πραγματικότητας Μπορούν να γίνουν αντιληπτά με μια από τις αισθήσεις μας Πληροφορία: Προκύπτει από

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

Κεφάλαιο 6: Προσομοίωση ενός συστήματος αναμονής

Κεφάλαιο 6: Προσομοίωση ενός συστήματος αναμονής Κεφάλαιο 6: Προσομοίωση ενός συστήματος αναμονής Τεχνικές Εκτίμησης Υπολογιστικών Συστημάτων Γιάννης Γαροφαλάκης Αν. Καθηγητής ιατύπωση του προβλήματος (1) Τα συστήματα αναμονής (queueing systems), βρίσκονται

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 19/10/2017 Ανακεφαλαίωση:

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 4/11/2016 Ανακεφαλαίωση:

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 19 Hashing - Κατακερματισμός 1 / 23 Πίνακες απευθείας πρόσβασης (Direct Access Tables) Οι πίνακες απευθείας

Διαβάστε περισσότερα

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

Διαβάστε περισσότερα

Κατακερματισμός (Hashing)

Κατακερματισμός (Hashing) Κατακερματισμός (Hashing) O κατακερματισμός είναι μια τεχνική οργάνωσης ενός αρχείου. Είναι αρκετά δημοφιλής μέθοδος για την οργάνωση αρχείων Βάσεων Δεδομένων, καθώς βοηθάει σημαντικά στην γρήγορη αναζήτηση

Διαβάστε περισσότερα

Τυπικές χρήσεις της Matlab

Τυπικές χρήσεις της Matlab Matlab Μάθημα 1 Τι είναι η Matlab Ολοκληρωμένο Περιβάλλον Περιβάλλον ανάπτυξης Διερμηνευμένη γλώσσα Υψηλή επίδοση Ευρύτητα εφαρμογών Ευκολία διατύπωσης Cross platform (Wintel, Unix, Mac) Τυπικές χρήσεις

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ 4 ο ΣΕΤ ΑΣΚΗΣΕΩΝ Οι ασκήσεις αυτού του φυλλαδίου καλύπτουν τα παρακάτω θέματα: Δείκτες Δομές Το τέταρτο σύνολο

Διαβάστε περισσότερα

Πληροφορική ΙΙ Εισαγωγή στις Βάσεις Δεδομένων. Τμήμα Λογιστικής

Πληροφορική ΙΙ Εισαγωγή στις Βάσεις Δεδομένων. Τμήμα Λογιστικής Εισαγωγή στις Βάσεις Δεδομένων Εισαγωγή στις Βάσεις Δεδομένων Ορισμός Βάσης Δεδομένων Σύστημα Διαχείρισης Βάσης Δεδομένων ΣΔΒΔ (DBMS) Χαρακτηριστικά προσέγγισης συστημάτων αρχειοθέτησης Χαρακτηριστικά

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα). Κ08 Δομές Δεδομένων και Τεχνικές Προγραμματισμού Διδάσκων: Μανόλης Κουμπαράκης Εαρινό Εξάμηνο 2016-2017. Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

Διαβάστε περισσότερα

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

Επιµέλεια Θοδωρής Πιερράτος εδοµένα οµές δεδοµένων και αλγόριθµοι Τα δεδοµένα είναι ακατέργαστα γεγονότα. Η συλλογή των ακατέργαστων δεδοµένων και ο συσχετισµός τους δίνει ως αποτέλεσµα την πληροφορία. Η µέτρηση, η κωδικοποίηση,

Διαβάστε περισσότερα

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ ) Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ. 25 48) Τι είναι αλγόριθμος; Γ ΛΥΚΕΙΟΥ Αλγόριθμος είναι μία πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρονικό διάστημα,

Διαβάστε περισσότερα

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες

Διαβάστε περισσότερα

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ mpompotas@ceid.upatras.gr Εισαγωγή - STL Η Standard Βιβλιοθήκη προτύπων (STL) είναι μια βιβλιοθήκη λογισμικού για την C++ Δημιουργήθηκε

Διαβάστε περισσότερα

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 7: Πρόγραμμα Συνδεδεμένης Λίστας και Διαδικασιών. Μανόλης Γ.Η.

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 7: Πρόγραμμα Συνδεδεμένης Λίστας και Διαδικασιών. Μανόλης Γ.Η. ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Οργάνωση Υπολογιστών Ασκήσεις 7: Πρόγραμμα Συνδεδεμένης Λίστας και Διαδικασιών Μανόλης Γ.Η. Κατεβαίνης Τμήμα Επιστήμης Υπολογιστών Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Αντισταθμιστική ανάλυση

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Αριθμητική Ανάλυση & Εφαρμογές

Αριθμητική Ανάλυση & Εφαρμογές Αριθμητική Ανάλυση & Εφαρμογές Διδάσκων: Δημήτριος Ι. Φωτιάδης Τμήμα Μηχανικών Επιστήμης Υλικών Ιωάννινα 2017-2018 Υπολογισμοί και Σφάλματα Παράσταση Πραγματικών Αριθμών Συστήματα Αριθμών Παράσταση Ακέραιου

Διαβάστε περισσότερα

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών Η επεξεργασία των δεδομένων ακολουθεί μια στερεότυπη διαδρομή: τα δεδομένα εισάγονται στο υπολογιστικό σύστημα, υφίστανται μια ορισμένη επεξεργασία και

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Δυνατότητα ανάπτυξης, μεταγλώττισης και εκτέλεσης προγραμμάτων στη PASCAL. Κατανόηση της σύνταξης των προτάσεων της PASCAL. Κατανόηση της εντολής εξόδου για

Διαβάστε περισσότερα

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών Οργάνωση Υπολογιστών Υπολογιστικό Σύστημα Λειτουργικό Σύστημα Αποτελεί τη διασύνδεση μεταξύ του υλικού ενός υπολογιστή και του χρήστη (προγραμμάτων ή ανθρώπων). Είναι ένα πρόγραμμα (ή ένα σύνολο προγραμμάτων)

Διαβάστε περισσότερα

Μάθημα 8: Διαχείριση Μνήμης

Μάθημα 8: Διαχείριση Μνήμης Μάθημα 8: Διαχείριση Μνήμης 8.1 Κύρια και δευτερεύουσα μνήμη Κάθε μονάδα ενός υπολογιστή που χρησιμεύει για τη μόνιμη ή προσωρινή αποθήκευση δεδομένων ανήκει στην μνήμη (memory) του υπολογιστή. Οι μνήμες

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ σε ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ (ΑΕΠΠ) ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ σε ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ (ΑΕΠΠ) Δημιουργία - Συγγραφή Costas Chatzinikolas info@costaschatzinikolas.gr Τελευταία Ενημέρωση:

Διαβάστε περισσότερα

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ 1 ΠΕΡΙΕΧΟΜΕΝΑ 1. ΑΝΑΛΥΣΗ ΜΕΝΟΥ ΕΦΑΡΜΟΓΗΣ... 4 2. ΕΠΕΞΗΓΗΣΗ ΚΕΝΤΡΙΚΟΥ ΜΕΝΟΥ ΚΑΡΤΕΛΑΣ... 5 3. ΔΗΜΙΟΥΡΓΙΑ ΠΕΛΑΤΗ... 6 4. ΑΝΑΖΗΤΗΣΗ ΠΕΛΑΤΗ... 6 5. ΕΠΕΞΕΡΓΑΣΙΑ/ΔΙΑΓΡΑΦΗ

Διαβάστε περισσότερα

Πρόβλημα 37 / σελίδα 207

Πρόβλημα 37 / σελίδα 207 Πρόβλημα 37 / σελίδα 207 2.5. Ôåóô áõôïáîéïëüãçóçò Δίνονται οι παρακάτω ομάδες προτάσεων. Σε κάθε μία από αυτές, να κάνετε τις απαραίτητες διορθώσεις ώστε να ισχύουν οι προτάσεις 1. Η αναπαράσταση

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομές Δεδομένων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές

Διαβάστε περισσότερα

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 3 1. Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή 2. Δυναμικές είναι οι δομές που αποθηκεύονται σε συνεχόμενες θέσεις μνήμης 3. Ένας πίνακας

Διαβάστε περισσότερα

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

#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα #2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα ηµήτρης Ν. Σερπάνος Εργαστήριο Συστηµάτων Υπολογιστών Τµήµα Ηλεκτρολόγων Μηχ. & Τεχνολογίας Υπολογιστών Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα Αλγόριθµοι:

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012 ΤΕΧΝΟΛΟΓΙΑ (Ι) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Μικροϋπολογιστές

Διαβάστε περισσότερα

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016 FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016 M7 Δομές δεδομένων: Πίνακες Δρ. Γεώργιος Παπαλάμπρου Επικ. Καθηγητής ΕΜΠ Εργαστήριο Ναυτικής Μηχανολογίας george.papalambrou@lme.ntua.gr ΕΜΠ/ΣΝΜΜ

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 8: Αφηρημένοι Τύποι Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αφηρημένοι Τύποι Δεδομένων (ΑΤΔ) Οι ΑΤΔ Στοίβα και Ουρά Υλοποίηση των ΑΤΔ Στοίβα και Ουρά με Στατική Δέσμευση

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) 1. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

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

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

3. Προσομοίωση ενός Συστήματος Αναμονής.

3. Προσομοίωση ενός Συστήματος Αναμονής. 3. Προσομοίωση ενός Συστήματος Αναμονής. 3.1. Διατύπωση του Προβλήματος. Τα συστήματα αναμονής (queueing systems), βρίσκονται πίσω από τα περισσότερα μοντέλα μελέτης της απόδοσης υπολογιστικών συστημάτων,

Διαβάστε περισσότερα

Στοιχειώδεις Δομές Δεδομένων

Στοιχειώδεις Δομές Δεδομένων Στοιχειώδεις Δομές Δεδομένων Τύποι δεδομένων στη Java Ακέραιοι (int, long) Αριθμοί κινητής υποδιαστολής (float, double) Χαρακτήρες (char) Δυαδικοί (boolean) Από τους παραπάνω μπορούμε να φτιάξουμε σύνθετους

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 2ο ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΑΚΡΙΤΩΝ ΓΕΓΟΝΟΤΩΝ

ΚΕΦΑΛΑΙΟ 2ο ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΑΚΡΙΤΩΝ ΓΕΓΟΝΟΤΩΝ ΚΕΦΑΛΑΙΟ 2ο ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΑΚΡΙΤΩΝ ΓΕΓΟΝΟΤΩΝ 2.1 Εισαγωγή Η μέθοδος που θα χρησιμοποιηθεί για να προσομοιωθεί ένα σύστημα έχει άμεση σχέση με το μοντέλο που δημιουργήθηκε για το σύστημα. Αυτό ισχύει και

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΑΣΥΜΠΤΩΤΙΚΗ ΑΝΑΛΥΣΗ & ΠΡΟΣΘΕΣΗ

ΑΣΥΜΠΤΩΤΙΚΗ ΑΝΑΛΥΣΗ & ΠΡΟΣΘΕΣΗ ΑΣΥΜΠΤΩΤΙΚΗ ΑΝΑΛΥΣΗ & ΠΡΟΣΘΕΣΗ Θέματα μελέτης Ορθότητα και απόδοση αλγορίθμων Παρουσίαση και ανάλυση αλγορίθμου για πρόσθεση Al Khwarizmi Αλγόριθμοι Το δεκαδικό σύστημα εφευρέθηκε στην Ινδία περίπου το

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Μεταγλωττιστές Στοίβα Εκτέλεσης και Εγγραφήματα Δραστηριοποίησης Σε όλες σχεδόν τις μοντέρνες γλώσσες προγραμματισμού,

Διαβάστε περισσότερα