ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Ροές
1) Γενικά
2) Η ροή προκαθορισμένης εισόδου stdin
3) Η ροή προκαθορισμένης εξόδου stdout
4) Η ροή προκαθορισμένης εξόδου λαθών stderr
Β. Συναρτήσεις ροής εισόδου stdin
1) Γενικά
2) Η συνάρτηση getchar()
3) Η συνάρτηση getch()
4) Η συνάρτηση getche()
5) H συνάρτηση ungetc()
6) Η συνάρτηση gets()
7) Η συνάρτηση fgets()
8) Η συνάρτηση scanf()
9) Η συνάρτηση fflush()
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Ροές
1) Γενικά
2) Η ροή προκαθορισμένης εισόδου stdin
3) Η ροή προκαθορισμένης εξόδου stdout
4) Η ροή προκαθορισμένης εξόδου λαθών stderr
Β. Συναρτήσεις ροής εισόδου stdin
1) Γενικά
2) Η συνάρτηση getchar()
3) Η συνάρτηση getch()
4) Η συνάρτηση getche()
5) H συνάρτηση ungetc()
6) Η συνάρτηση gets()
7) Η συνάρτηση fgets()
8) Η συνάρτηση scanf()
9) Η συνάρτηση fflush()
Α. Δείκτες
1) Η μνήμη του υπολογιστή
2) Η έννοια του δείκτη
3) Ορισμός Δείκτη
4) Απόδοση τιμής σε δείκτη (Ο τελεστής &)
5) Απόδοση τιμής μέσω δείκτη (ο τελεστής *)
6) Παράδειγμα χρήσης δείκτη
Β. Δείκτες και Πίνακες
1) Το όνομα ενός πίνακα είναι δείκτης
2) Αποθήκευση ενός πίνακα στη μνήμη
3) Αριθμητική Δεικτών
4) Ισοδύναμος Συμβολισμός για πρόσβασή σε πίνακα
Γ. Δείκτες και Συναρτήσεις
1) Διοχέτευση Δείκτη σε Συνάρτηση
2) Διοχέτευση Ορίσματος σε Συνάρτηση μέσω Τιμής
3) Διοχέτευση Ορίσματος σε Συνάρτηση μέσω Αναφοράς
Δ. Παρατηρήσεις
1) Διοχέτευση πίνακα ως όρισμα σε συνάρτηση
2) Η Σταθερά NULL
Ασκήσεις
Θεωρία
1) Στοιχεία ενός προγράμματος C
2) Η συνάρτηση main()
3) H οδηγία #include
4) Μεταβλητές
5) Εντολές
5.1) Η εντολή printf
5.2) Η εντολή scanf
6) Συναρτήσεις Χρήστη
6.1) Το πρωτότυπο μιας συνάρτησης
6.2) Το σώμα μιας συνάρτησης
6.3) Κλήση μιας συνάρτησης
7) Σχόλια Προγράμματος
Ασκήσεις
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑDimitris Psounis
A. Επικοινωνία με το Λειτουργικό Σύστημα
1) Γενικά
2) Λειτουργικό Σύστημα
3) Ορίσματα Γραμμής Εντολής
3.1) Ορισμός της main με ορίσματα
3.2) Παράδειγμα με διαφορετικό πλήθος ορισμάτων
3.3) Μετατροπή συμβολοσειράς σε άλλο τύπο δεδομένων
4) Ανακατεύθυνση Εισόδου / Εξόδου
4.1) Ανακατεύθυνση εξόδου
4.2) Ανακατεύθυνση εισόδου
B. Ασκήσεις
1) Κύκλος Hamilton
1.1) Ορισμός Κύκλου Hamilton
1.2) Πως δείχνουμε ότι ένα γράφημα έχει κύκλο Hamilton (κατασκευαστικές, θεώρημα Dirac, θεώρημα Ore)
1.3) Πως δείχνουμε ότι ένα γράφημα δεν έχει κύκλο Hamilton (Απόδειξη εξαντλητικής περιπτωσιολογίας).
Ασκήσεις
1) Θεωρία
1.1) Κύκλος Ανάπτυξης Προγράμματος
1.1.1) Βήματα Δημιουργία ενός Προγράμματος
1.1.2) Κατέβασμα και εγκατάσταση του Dev-C++
1.2) Το πρώτο πρόγραμμα σε C
1.2.1) Περιγραφή του προγράμματος
1.2.2) Συγγραφή του προγράμματος
1.2.3) Μεταγλώττιση του προγράμματος
1.2.4) Σύνδεση των αρχείων
1.2.5) Εκτέλεση του προγράμματος
1.2.6) Λίγα λόγια για το πρόγραμμα
2) Ασκήσεις
Α. Πίνακες
Α.1) Εισαγωγή στους Πίνακες
Α.1.1) Μονοδιάστατοι Πίνακες
Α.1.2) Παράδειγμα
B. Δομές Επανάληψης
Β.1) Γενικά
Β.2) Η δομή for
Β.2.1) Συντακτικό της for
Β.2.2) Διάγραμμα Ροής Προγράμματος
Β.2.3) Παραδείγματα Εκτέλεσης
Β.3) Η δομή do…while
Β.3.1) Συντακτικό της do…while
Β.3.2) Διάγραμμα Ροής Προγράμματος
Β.3.3) Παραδείγματα Εκτέλεσης
Β.3.4) Αμυντικός Προγραμματισμός
Β.4) Η δομή while
Β.4.1) Συντακτικό της while
Β.4.2) Διάγραμμα Ροής Προγράμματος
Β.4.3) Παραδείγματα Εκτέλεσης
Β.4.4) Αμυντικός Προγραμματισμός
Β.5) Συμπεράσματα
Β.5.1) Προτεινόμενη χρήση των δομών επανάληψης
Β.5.2) Προσομοίωση της for από την while και τη do..while
Γ) Ασκήσεις
Γ.1) Άθροισμα και Γινόμενο Αριθμών
Γ.2) Εμφωλιασμένοι Βρόχοι: Εκτύπωση Αθροισμάτων
Γ.3) Εμφωλιασμένοι Βρόχοι: Εκτύπωση Παραλληλογράμμου
Γ.4) Εμφωλιασμένοι Βρόχοι: Εκτύπωση Τριγώνου
Γ.5) Άθροισμα Αριθμών με Χρήση Πίνακα
Γ.6) Γινόμενο Αριθμών με Χρήση Πίνακα
Γ.7) Ελάχιστος από N αριθμούς
Γ.8) Μέσος Όρος Ν αριθμών
Α. Χαρακτήρες
1) Ο τύπος δεδομένων char
2) O πίνακας ASCII
3) Χρήση Μεταβλητών τύπου char
Β. Συμβολοσειρές
1) Τι είναι η συμβολοσειρά
2) Διάβασμα και Εκτύπωση Συμβολοσειράς
3) Οι συναρτήσεις gets και puts
4) Η βιβλιοθήκη string.h
Γ. Ασκήσεις
A. Πρόσθετα Στοιχεία της Ψευδογλώσσας
1) Μαθηματικές Συναρτήσεις
2) Επιλογή με Πολλά Ενδεχόμενα
3) Τύποι Δεδομένων
4) Δείκτες και Δομές Δεδομένων
5) Η εντολή GOTO
6) Χειρισμός Εξαιρέσεων
Α. Έλεγχος Προγράμματος
1) Η εντολή άμεσης επανάληψης continue
2) Η εντολή διακοπής επανάληψης break
3) Η εντολή μεταφοράς ελέγχου προγράμματος goto
4) Η εντολή ελέγχου πολλαπλής συνθήκης switch
Β. Προγραμματιστικές Τεχνικές
1) Ατέρμονες Βρόχοι για την κατασκευή menu
2) Άμεση Έξοδος από το πρόγραμμα
3) Εκτέλεση Εντολών Συστήματος
Γ.Ασκήσεις
1) Εισαγωγικοί Ορισμοί
1.1) Κατευθυνόνομενο Γράφημα
1.2) Μονοπάτια
1.3) Κύκλοι
1.4) Έσω και Έξω Βαθμός Κορυφής
1.5) Απομονωμένη Κορυφή
1.6) Πλήρες Γράφημα
2) Η Γλώσσα των Κατευθυνόμενων Γραφημάτων
2.1) Η Γλώσσα των Κατευθυνόμενων Γραφημάτων
2.2) Ερμηνείες στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
3) Ασκήσεις στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
3.1) Μετάφραση στα Ελληνικά
3.2) Μετάφραση στα Κατηγορηματικά
3.3) Εύρεση Αλήθειας Προτάσεων
3.4) Εύρεση Ερμηνείας που ικανοποιεί δεδομένη πρόταση
3.5) Συντομογραφίες στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
Ασκήσεις
Α. Δείκτες
1) Η μνήμη του υπολογιστή
2) Η έννοια του δείκτη
3) Ορισμός Δείκτη
4) Απόδοση τιμής σε δείκτη (Ο τελεστής &)
5) Απόδοση τιμής μέσω δείκτη (ο τελεστής *)
6) Παράδειγμα χρήσης δείκτη
Β. Δείκτες και Πίνακες
1) Το όνομα ενός πίνακα είναι δείκτης
2) Αποθήκευση ενός πίνακα στη μνήμη
3) Αριθμητική Δεικτών
4) Ισοδύναμος Συμβολισμός για πρόσβασή σε πίνακα
Γ. Δείκτες και Συναρτήσεις
1) Διοχέτευση Δείκτη σε Συνάρτηση
2) Διοχέτευση Ορίσματος σε Συνάρτηση μέσω Τιμής
3) Διοχέτευση Ορίσματος σε Συνάρτηση μέσω Αναφοράς
Δ. Παρατηρήσεις
1) Διοχέτευση πίνακα ως όρισμα σε συνάρτηση
2) Η Σταθερά NULL
Ασκήσεις
Θεωρία
1) Στοιχεία ενός προγράμματος C
2) Η συνάρτηση main()
3) H οδηγία #include
4) Μεταβλητές
5) Εντολές
5.1) Η εντολή printf
5.2) Η εντολή scanf
6) Συναρτήσεις Χρήστη
6.1) Το πρωτότυπο μιας συνάρτησης
6.2) Το σώμα μιας συνάρτησης
6.3) Κλήση μιας συνάρτησης
7) Σχόλια Προγράμματος
Ασκήσεις
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑDimitris Psounis
A. Επικοινωνία με το Λειτουργικό Σύστημα
1) Γενικά
2) Λειτουργικό Σύστημα
3) Ορίσματα Γραμμής Εντολής
3.1) Ορισμός της main με ορίσματα
3.2) Παράδειγμα με διαφορετικό πλήθος ορισμάτων
3.3) Μετατροπή συμβολοσειράς σε άλλο τύπο δεδομένων
4) Ανακατεύθυνση Εισόδου / Εξόδου
4.1) Ανακατεύθυνση εξόδου
4.2) Ανακατεύθυνση εισόδου
B. Ασκήσεις
1) Κύκλος Hamilton
1.1) Ορισμός Κύκλου Hamilton
1.2) Πως δείχνουμε ότι ένα γράφημα έχει κύκλο Hamilton (κατασκευαστικές, θεώρημα Dirac, θεώρημα Ore)
1.3) Πως δείχνουμε ότι ένα γράφημα δεν έχει κύκλο Hamilton (Απόδειξη εξαντλητικής περιπτωσιολογίας).
Ασκήσεις
1) Θεωρία
1.1) Κύκλος Ανάπτυξης Προγράμματος
1.1.1) Βήματα Δημιουργία ενός Προγράμματος
1.1.2) Κατέβασμα και εγκατάσταση του Dev-C++
1.2) Το πρώτο πρόγραμμα σε C
1.2.1) Περιγραφή του προγράμματος
1.2.2) Συγγραφή του προγράμματος
1.2.3) Μεταγλώττιση του προγράμματος
1.2.4) Σύνδεση των αρχείων
1.2.5) Εκτέλεση του προγράμματος
1.2.6) Λίγα λόγια για το πρόγραμμα
2) Ασκήσεις
Α. Πίνακες
Α.1) Εισαγωγή στους Πίνακες
Α.1.1) Μονοδιάστατοι Πίνακες
Α.1.2) Παράδειγμα
B. Δομές Επανάληψης
Β.1) Γενικά
Β.2) Η δομή for
Β.2.1) Συντακτικό της for
Β.2.2) Διάγραμμα Ροής Προγράμματος
Β.2.3) Παραδείγματα Εκτέλεσης
Β.3) Η δομή do…while
Β.3.1) Συντακτικό της do…while
Β.3.2) Διάγραμμα Ροής Προγράμματος
Β.3.3) Παραδείγματα Εκτέλεσης
Β.3.4) Αμυντικός Προγραμματισμός
Β.4) Η δομή while
Β.4.1) Συντακτικό της while
Β.4.2) Διάγραμμα Ροής Προγράμματος
Β.4.3) Παραδείγματα Εκτέλεσης
Β.4.4) Αμυντικός Προγραμματισμός
Β.5) Συμπεράσματα
Β.5.1) Προτεινόμενη χρήση των δομών επανάληψης
Β.5.2) Προσομοίωση της for από την while και τη do..while
Γ) Ασκήσεις
Γ.1) Άθροισμα και Γινόμενο Αριθμών
Γ.2) Εμφωλιασμένοι Βρόχοι: Εκτύπωση Αθροισμάτων
Γ.3) Εμφωλιασμένοι Βρόχοι: Εκτύπωση Παραλληλογράμμου
Γ.4) Εμφωλιασμένοι Βρόχοι: Εκτύπωση Τριγώνου
Γ.5) Άθροισμα Αριθμών με Χρήση Πίνακα
Γ.6) Γινόμενο Αριθμών με Χρήση Πίνακα
Γ.7) Ελάχιστος από N αριθμούς
Γ.8) Μέσος Όρος Ν αριθμών
Α. Χαρακτήρες
1) Ο τύπος δεδομένων char
2) O πίνακας ASCII
3) Χρήση Μεταβλητών τύπου char
Β. Συμβολοσειρές
1) Τι είναι η συμβολοσειρά
2) Διάβασμα και Εκτύπωση Συμβολοσειράς
3) Οι συναρτήσεις gets και puts
4) Η βιβλιοθήκη string.h
Γ. Ασκήσεις
A. Πρόσθετα Στοιχεία της Ψευδογλώσσας
1) Μαθηματικές Συναρτήσεις
2) Επιλογή με Πολλά Ενδεχόμενα
3) Τύποι Δεδομένων
4) Δείκτες και Δομές Δεδομένων
5) Η εντολή GOTO
6) Χειρισμός Εξαιρέσεων
Α. Έλεγχος Προγράμματος
1) Η εντολή άμεσης επανάληψης continue
2) Η εντολή διακοπής επανάληψης break
3) Η εντολή μεταφοράς ελέγχου προγράμματος goto
4) Η εντολή ελέγχου πολλαπλής συνθήκης switch
Β. Προγραμματιστικές Τεχνικές
1) Ατέρμονες Βρόχοι για την κατασκευή menu
2) Άμεση Έξοδος από το πρόγραμμα
3) Εκτέλεση Εντολών Συστήματος
Γ.Ασκήσεις
1) Εισαγωγικοί Ορισμοί
1.1) Κατευθυνόνομενο Γράφημα
1.2) Μονοπάτια
1.3) Κύκλοι
1.4) Έσω και Έξω Βαθμός Κορυφής
1.5) Απομονωμένη Κορυφή
1.6) Πλήρες Γράφημα
2) Η Γλώσσα των Κατευθυνόμενων Γραφημάτων
2.1) Η Γλώσσα των Κατευθυνόμενων Γραφημάτων
2.2) Ερμηνείες στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
3) Ασκήσεις στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
3.1) Μετάφραση στα Ελληνικά
3.2) Μετάφραση στα Κατηγορηματικά
3.3) Εύρεση Αλήθειας Προτάσεων
3.4) Εύρεση Ερμηνείας που ικανοποιεί δεδομένη πρόταση
3.5) Συντομογραφίες στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
Ασκήσεις
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)Dimitris Psounis
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1.Διαχείριση Μνήμης
1.1.Στατική Δέσμευση Μνήμης
1.2.Στατική Δέσμευση Μνήμης για Συνήθεις Μεταβλητές
1.3.Στατική Δέσμευση Μνήμης για Αντικείμενα
2.Δυναμική Δέσμευση Μνήμης
2.1.Δείκτες (Υπενθύμιση από C)
2.2.Οι τελεστές new και delete
2.3.Δυναμική Δέσμευση για Συνήθεις Μεταβλητές
2.4.Δυναμική Δέσμευση για Αντικείμενα
2.5.Δυναμική Δέσμευση και Κατασκευαστές
3.Κλάσεις που περιέχουν δείκτες
3.1.Παράδειγμα κλάσης που περιέχει δείκτες
3.2.…και ένα πρόβλημα (χωρίς λύση για την ώρα)
4..Δυναμική Δέσμευση Μνήμης για Πίνακες
4.1.Μονοδιάστατοι πίνακες
4.2.Παράδειγμα δέσμευσης μνήμης για μονοδιάστατους πίνακες
4.3.Διδιάστατοι πίνακες
4.4.Παράδειγμα δέσμευσης μνήμης για διδιάστατους πίνακες
B. Ασκήσεις
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1.Διαχείριση Μνήμης
1.1.Στατική Δέσμευση Μνήμης
1.2.Στατική Δέσμευση Μνήμης για Συνήθεις Μεταβλητές
1.3.Στατική Δέσμευση Μνήμης για Αντικείμενα
2.Δυναμική Δέσμευση Μνήμης
2.1.Δείκτες (Υπενθύμιση από C)
2.2.Οι τελεστές new και delete
2.3.Δυναμική Δέσμευση για Συνήθεις Μεταβλητές
2.4.Δυναμική Δέσμευση για Αντικείμενα
2.5.Δυναμική Δέσμευση και Κατασκευαστές
3.Κλάσεις που περιέχουν δείκτες
3.1.Παράδειγμα κλάσης που περιέχει δείκτες
3.2.…και ένα πρόβλημα (χωρίς λύση για την ώρα)
4..Δυναμική Δέσμευση Μνήμης για Πίνακες
4.1.Μονοδιάστατοι πίνακες
4.2.Παράδειγμα δέσμευσης μνήμης για μονοδιάστατους πίνακες
4.3.Διδιάστατοι πίνακες
4.4.Παράδειγμα δέσμευσης μνήμης για διδιάστατους πίνακες
B. Ασκήσεις
Α. Θεωρία
1. Κλάσεις
1.1 Γενικά
1.2 Ορισμός Κλάσης
1.3 Δημόσια (public) στοιχεία της κλάσης
1.4 Ιδιωτικά (private) στοιχεία της κλάσης
1.5 Παράδειγμα (προδιαγραφές)
2 Περισσότερα για τις κλάσεις
2.1 Ορισμός Συναρτήσεων έξω από την Κλάση
2.2 Παρουσίαση Ιδιωτικών – Δημόσιων Μέλων μιας κλάσης
2.3 Χωρισμός σε Αρχεία
3. Ειδικές Μεθόδοι Κλάσεων
3.1 Γενικά
3.2 Κατασκευαστής (constructor)
3.3 Καταστροφέας (destructor)
3.4 Ελεγκτές Πρόσβασης (accessors)
B. Ασκήσεις
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)Dimitris Psounis
Α. Θεωρία
1. Κλάσεις
1.1 Γενικά
1.2 Ορισμός Κλάσης
1.3 Δημόσια (public) στοιχεία της κλάσης
1.4 Ιδιωτικά (private) στοιχεία της κλάσης
1.5 Παράδειγμα (προδιαγραφές)
2 Περισσότερα για τις κλάσεις
2.1 Ορισμός Συναρτήσεων έξω από την Κλάση
2.2 Παρουσίαση Ιδιωτικών – Δημόσιων Μέλων μιας κλάσης
2.3 Χωρισμός σε Αρχεία
3. Ειδικές Μεθόδοι Κλάσεων
3.1 Γενικά
3.2 Κατασκευαστής (constructor)
3.3 Καταστροφέας (destructor)
3.4 Ελεγκτές Πρόσβασης (accessors)
B. Ασκήσεις
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1. Η Γλώσσα C++
1.1. Γενικά
1.2. Ιστορία – Εκδόσεις
1.3. Η αναγκαιότητα της C
1.4. Μεταγλωττιστές
2. Hello World!
2.1. Πηγαίος Κώδικας
2.2. Σχόλια
2.3. Βιβλιοθήκη iostream
2.4. main, block κώδικα, return
2.5 Είσοδος/Έξοδος
2.5.1. Έξοδος με την cout
2.5.2. Οδηγία using
2.5.3. Περισσότερα για την cout
2.5.4. Είσοδος με την cin
3. Στοιχεία της C
3.1. Μεταβλητές
3.2. Σταθερές
3.3. Τελεστές και η Δομή Ελέγχου
3.4. Δομές Επανάληψης
3.5. Συναρτήσεις
3.5.1. Πολυμορφισμός Συναρτήσεων
3.6. Πίνακες
3.7. Συμβολοσειρές
3.8. Δείκτες
B.Ασκήσεις
Εφαρμογή 1
Εφαρμογή 2
Εφαρμογή 3
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)Dimitris Psounis
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1. Η Γλώσσα C++
1.1. Γενικά
1.2. Ιστορία – Εκδόσεις
1.3. Η αναγκαιότητα της C
1.4. Μεταγλωττιστές
2. Hello World!
2.1. Πηγαίος Κώδικας
2.2. Σχόλια
2.3. Βιβλιοθήκη iostream
2.4. main, block κώδικα, return
2.5 Είσοδος/Έξοδος
2.5.1. Έξοδος με την cout
2.5.2. Οδηγία using
2.5.3. Περισσότερα για την cout
2.5.4. Είσοδος με την cin
3. Στοιχεία της C
3.1. Μεταβλητές
3.2. Σταθερές
3.3. Τελεστές και η Δομή Ελέγχου
3.4. Δομές Επανάληψης
3.5. Συναρτήσεις
3.5.1. Πολυμορφισμός Συναρτήσεων
3.6. Πίνακες
3.7. Συμβολοσειρές
3.8. Δείκτες
B.Ασκήσεις
Εφαρμογή 1
Εφαρμογή 2
Εφαρμογή 3
2. Περιεχόµενα Μαθήµατος
Α. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
1. Ορισµός ∆∆Α
2. Βασικές Πράξεις
3. Υλοποίηση σε C: Αναζήτηση σε ∆∆Α
4. Υλοποίηση σε C: Εισαγωγή σε ∆∆Α
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
Β. Ασκήσεις
2∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
3. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
1. Ορισµός ∆υαδικού ∆ένδρου Αναζήτησης
3∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
Το «∆υαδικό ∆ένδρο Αναζήτησης» (∆∆Α) είναι ένα δένδρο στο οποίο σε κάθε κόµβο έχει
αποθηκευτεί µία τιµή v και επιπλέον:
• Στις κορυφές του αριστερού υποδένδρου, έχουν αποθηκευτεί τιµές µικρότερες της v.
• Στις κορυφές του δεξιού υποδένδρου έχουν αποθηκευτεί τιµές µεγαλύτερες της v.
Σηµαντικό: Η ενδοδιατεταγµένη διαδροµή σε ένα ∆∆Α επιστρέφει τους αριθµούς του ∆∆Α σε αύξουσα σειρά
Παραδείγµατα ∆υαδικών ∆ένδρων Αναζήτησης:
11
146
19134
5 2617
∆∆Α που αποθηκεύει αριθµούς
john
ben pam
alice eve max tom
∆∆Α που αποθηκεύει συµβολοσειρές
4. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
2. Βασικές Πράξεις
4∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
Οι βασικές πράξεις σε ένα δυαδικό δένδρο αναζήτησης (επεκτείνοντας το δυαδικό δένδρο) είναι:
• Εισαγωγή ενός στοιχείου στο δένδρο (insert_BST)
• Αναζήτηση ενός στοιχείου στο δένδρο (search_BST)
• ∆ιαγραφή ενός στοιχείου από το δένδρο (delete_BST)
Παρατήρηση: Επεκτείνουµε τον ορισµό του ∆υαδικού ∆ένδρου, αφού η εισαγωγή και η διαγραφή
κόµβων από το ∆∆Α θα ακολουθούν κάποιο συγκεκριµένο αλγόριθµο, ώστε µετά από την εκτέλεση
των πράξεων το δένδρο να εξακολουθεί να έχει την ιδιότητα του ∆∆Α.
5. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
3. Υλοποίηση σε C: Αναζήτηση σε ∆∆Α
5∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
Η συνάρτηση «Αναζήτηση» ψάχνει για το στοιχείο Χ στο δυαδικό δένδρο αναζήτησης και
επιστρέφει ΝΑΙ/ΌΧΙ ανάλογα µε το αν το στοιχείο υπάρχει στο δένδρο:
Σκιαγράφηση αλγορίθµου:
Θέτει Κ = ρίζα του δένδρου
Επανέλαβε όσο Κ ≠ KENO
Αν (Χ = Κ)
Επέστρεψε ΝΑΙ
Αλλιώς αν (Χ > Κ)
Θέσε Κ=δεξί παιδί της Κ.
Αλλιώς αν (Χ < Κ)
Θέσε Κ=αριστερό παιδί της Κ.
Τέλος-Επανάληψης
Επέστρεψε ΟΧΙ
6. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
3. Υλοποίηση σε C: Αναζήτηση σε ∆∆Α
6∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
Παράδειγµα Αναζήτησης του δεδοµένου 8 (κόκκινο χρώµα) και του 17 (µπλέ χρώµα)
Αναζήτηση του 8: 10(αριστερά), 6(δεξιά), 7(δεξιά), 8 (βρέθηκε). Απάντηση: ΝΑΙ
Αναζήτηση του 17: 10(δεξιά), 14 (δεξιά), 19(αριστερά). ΚΕΝΟ. Απάντηση: ΟΧΙ
10
146
1975
82
3
7. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
3. Υλοποίηση σε C: Αναζήτηση σε ∆∆Α
7∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
/* TR_search_BST(): anazitisi tou x sto
DDA me riza root */
int TR_search_BST(TREE_PTR root, elem x)
{
TREE_PTR current;
current=root;
while (current!=NULL)
{
if (x == current->data)
return TRUE;
else if (x < current->data)
current=current->left;
else // x > current->data
current=current->right;
}
return FALSE;
}
8. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
4. Υλοποίηση σε C: Εισαγωγή σε ∆∆Α
8∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
Σκιαγράφηση αλγορίθµου:
Αν Τ είναι άδειο, τοποθέτησε το x ως ρίζα. Επέστρεψε TRUE
Θέσε Κ=ρίζα του δένδρου
Επανέλαβε:
Αν x==K
Επέστρεψε FALSE
Αλλιώς αν x<K
Αν Κ δεν έχει αριστερό παιδί:
Κατασκεύασε αριστερό παιδί της K με δεδομένο x. Επέστρεψε TRUE
Αλλιώς
Θέσε K=αριστερό παιδί του Κ.
Αλλιώς // x>K
Αν Κ δεν έχει δεξί παιδί:
Κατασκεύασε δεξί παιδί του K με δεδομένο x. Επέστρεψε TRUE
Αλλιώς
Θέσε K=δεξί παιδί του Κ.
Ο αλγόριθµος «Εισαγωγής σε ∆∆Α» δεδοµένου ενός ∆∆Α Τ και ενός δεδοµένου x:
• Αν το x υπάρχει στο δένδρο Τ επιστρέφει FALSE
• Αν το x δεν υπάρχει στο δένδρο Τ το εισάγει σε θέση που σέβεται το ∆∆Α.
9. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
4. Υλοποίηση σε C: Εισαγωγή σε ∆∆Α
9∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
Παράδειγµα Εισαγωγής του δεδοµένου 17
10
146
1975
82
3
10
146
1975
82
3
17
10. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
4. Υλοποίηση σε C: Εισαγωγή σε ∆∆Α
10∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
/* TR_insert_BST(): eisagwgi tou x
sto DDA me riza root */
int TR_insert_BST(TREE_PTR *root, elem x)
{
TREE_PTR current;
/* 1. Eisagwgi se adeio dentro */
if (*root==NULL)
{
TR_insert_root(root, x);
return TRUE;
}
/* 2. Anazitisi + Eisagwgi sto dendro */
current=*root;
while (1)
{
if (x == current->data)
return FALSE;
11. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
4. Υλοποίηση σε C: Εισαγωγή σε ∆∆Α
11∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
else if (x < current->data)
{
if (current->left==NULL)
{
TR_insert_left(current,x);
return TRUE;
}
else
current=current->left;
}
else // x > current->data
{
if (current->right==NULL)
{
TR_insert_right(current,x);
return TRUE;
}
else
current=current->right;
}
}
}
12. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
12∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
Ο αλγόριθµος «∆ιαγραφής σε ∆∆Α» παίρνει ως όρισµα ένα δένδρο Τ και ένα δεδοµένο x (που
υπάρχει στο δένδρο) και ξεχωρίζει 3 περιπτώσεις:
• Αν ο κόµβος του x δεν έχει παιδιά, τότε διαγράφουµε τον κόµβο.
10
146
1975
82
3
Παράδειγµα: ∆ιαγραφή του «8»
ΠΡΙΝ 10
146
1975
2
3
ΜΕΤΑ
13. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
13∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
• Αν ο κόµβος του x έχει ένα παιδί, τότε διαγράφουµε τον κόµβο και το παιδί του τον
αντικαθιστά.
10
146
1975
82
3
Παράδειγµα: ∆ιαγραφή του «5»
ΠΡΙΝ ΜΕΤΑ 10
146
197
8
2
3
14. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
14∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
• Αν ο κόµβος του x έχει δύο παιδιά, τότε: Βρίσκουµε τον επόµενο στην ενδοδιατεταγµένη
διαδροµή και αντικαθιστούµε τον x µε αυτόν.
• Περίπτωση 1: Το δεξί παιδί του x δεν έχει αριστερό παιδί
• Τότε ο x αντικαθίσταται από το δεξί παιδί του (που διατηρεί το δεξί υποδένδρο του).
10
146
1975
82
3
Παράδειγµα: ∆ιαγραφή του «6»
ΠΡΙΝ ΜΕΤΑ 10
147
1985
2
3
15. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
15∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
• Αν ο κόµβος του x έχει δύο παιδιά, τότε: Βρίσκουµε τον επόµενο στην ενδοδιατεταγµένη
διαδροµή (y) και αντικαθιστούµε τον x µε αυτόν.
• Περίπτωση 2: Το δεξί παιδί του x έχει αριστερό παιδί
• Ο y παίρνει τη θέση του x
• Ο κόµβος του y αντικαθίσταται από το δεξί υποδένδρο του y
Παράδειγµα: ∆ιαγραφή του «10»
ΠΡΙΝ
ΜΕΤΑ
10
147
19135
2 11
12
11
147
19135
2 12
16. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
16∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
/* TR_delete_BST(): diagrafi tou x
apo to DDA me riza root */
int TR_delete_BST(TREE_PTR *root, elem x)
{
TREE_PTR current, parent, nextOrdered;
int p; /* 1. deksi paidi, 2. aristero paidi tou current */
int temp;
/* 1. Anazitisi tou komvou */
parent=NULL;
current=*root;
while (current!=NULL)
{
if (x == current->data)
break;
else if (x < current->data)
{
parent=current;
p=1;
current=current->left;
}
17. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
17∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
else // x > current->data
{
parent=current;
p=2;
current=current->right;
}
}
if (current==NULL)
return FALSE;
/* 2.1 An den exei paidia */
if (current->left==NULL && current->right==NULL)
{
free(current);
if (parent==NULL)
*root=NULL;
else
if (p==1)
parent->left=NULL;
else
parent->right=NULL;
return TRUE;
}
18. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
18∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
/* 2.2 Exei mono aristero paidi */
else if (current->left!=NULL && current->right==NULL)
{
if (parent==NULL)
*root=current->left;
else
if (p==1)
parent->left=current->left;
else
parent->right=current->left;
free(current);
return TRUE;
}
/* 2.3 Exei mono deksi paidi */
else if (current->left==NULL && current->right!=NULL)
{
if (parent==NULL)
*root=current->right;
else
if (p==1)
parent->left=current->right;
else
parent->right=current->right;
19. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
19∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
free(current);
return TRUE;
}
/* 2.4 Exei aristero kai deksi paidi */
else
{
/* 2.4.1 Vriskei ton epomeno stin endodiatetagmeni */
p=1;
nextOrdered=current->right;
while (nextOrdered->left!=NULL)
{
parent=nextOrdered;
nextOrdered=nextOrdered->left;
p=2;
}
/*2.4.2 Antallassei times me ton komvo pou diagrafetai */
current->data=nextOrdered->data;
20. A. Θεωρία
1. ∆υαδικό ∆ένδρο Αναζήτησης
5. Υλοποίηση σε C: ∆ιαγραφή σε ∆∆Α
20∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης
/*2.4.3 Diagrafei ton komvo */
if (p==1) /*2.4.3.1 O epomenos einai to deksi paidi */
{
current->right=nextOrdered->right;
free(nextOrdered);
}
else
{
parent->left=nextOrdered->right;
free(nextOrdered);
}
}
}
21. Β. Ασκήσεις
Εφαρµογή 1: Μελέτη Προγράµµατος
∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης 21
Μελετήστε το project tree.dev στο οποίο υλοποιούνται οι βασικές πράξεις των δυαδικών
δένδρων αναζήτησης που µελετήσαµε στο µάθηµα.
22. Β. Ασκήσεις
Εφαρµογή 2: Εκτέλεση «µε το χέρι»
∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης 22
1. Εισάγετε τα ακόλουθα δεδοµένα σε ένα ∆∆Α: «10 6 3 9 12 5 4 2 1 8».
2. ∆ιαγράψτε τον κόµβο 12
3. Εισάγετε τον κόµβο 7
23. Β. Ασκήσεις
Εφαρµογή 2: Εκτέλεση «µε το χέρι»
∆ηµήτρης Ψούνης, ∆οµές ∆εδοµένων σε C, Μάθηµα 7: ∆υαδικά ∆ένδρα Αναζήτησης 23
4. ∆ιαγράψτε τον κόµβο 3
5. ∆ώστε την ενδοδιατεταγµένη διαπέραση του δένδρου
6. Κατασκεύαστε πλήρες δυαδικό δένδρο αναζήτησης που να περιέχει τα περιεχόµενα του
δένδρου .