ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ
Τμήμα Ηλεκτρονικών Μηχ. και Μηχ. Υπολογιστών

ΛΟΓ 201: Τεχνολογία Λογισμικού ΙΙ
http://www.softlab.ntua.gr/~nickie/TUC/log201/

2η Σειρά Ασκήσεων
Υποδείξεις


Άσκηση 1

Μια σύντομη περιγραφή των δένδρων δυαδικής αναζήτησης δίνεται στην εκφώνηση της άσκησης. Εκτενέστερες περιγραφές μπορείτε να βρείτε σε βιβλία δομών δεδομένων.

Η σύγκριση των τιμών γίνεται με τον τελεστή < ο οποίος υποθέτουμε ότι υποστηρίζεται από τον τύπο T.

Η προσθήκη στοιχείων σε ένα δένδρο δυαδικής αναζήτησης μπορεί να γίνει εύκολα με αναδρομικό τρόπο:

Οι τιμές αντιγράφονται στα δένδρα, επομένως υποθέτουμε επίσης ότι ο τύπος T διαθέτει copy constructor. Η άσκηση δε ζητάει να γίνεται κανενός είδους "ζύγισμα" των δένδρων.

Η υλοποίηση της μεθόδου print μπορεί να γίνει αναδρομικά με απλό τρόπο:


Άσκηση 2

Οι iterators που ζητείται να υλοποιηθούν ανήκουν σε δυο μεγάλες κατηγορίες:

Στην πρώτη κατηγορία, διακρίνουμε τρεις τρόπους διάσχισης:

Το παράδειγμα στο τέλος της εκφώνησης της άσκησης 3 περιγράφει όλους τους ζητούμενους τρόπους διάσχισης. Η υλοποίησή τους είναι εύκολο να γίνει αναδρομικά.

Ένας απλός τρόπος υλοποίησης των iterators είναι ο ακόλουθος. Μπορείτε να ενσωματώσετε μια ουρά κόμβων σε κάθε iterator, την οποία θα γεμίζετε στον constructor χρησιμοποιώντας την αναδρομική υλοποίηση των τρόπων διάσχισης. Στη συνέχεια, οι μέθοδοι get και current θα βλέπουν μόνο την ουρά και θα επιστρέφουν στοιχεία από αυτήν.

Για τη διευκόλυνσή σας, μπορείτε να χρησιμοποιήσετε στη λύση της άσκησης τα ακόλουθα templates:

Η χρήση των παραπάνω δεν είναι υποχρεωτική, επίσης δεν είναι απαραίτητο να χρησιμοποιήσετε και τα δύο.

Τα templates των iterators θα πρέπει να κληρονομούν το βασικό αφηρημένο template BinaryTreeIterator<T>. Αυτό σημαίνει ότι θα έχετε:

template <class T>
   class InfixIterator : public BinaryTreeIterator<T>
... template <class T> class PrefixIterator : public BinaryTreeIterator<T> ... template <class T> class PostfixIterator : public BinaryTreeIterator<T> ... template <class T> class BFSIterator : public BinaryTreeIterator<T> ...

Άσκηση 3

Ο κώδικας που δίνεται θα πρέπει να μπορεί να ενσωματωθεί στο πρόγραμμά σας όπως ακριβώς είναι και να εκτυπώνει τα αποτελέσματα που δίνονται στην εκφώνηση.


Νίκος Παπασπύρου (nickie@softlab.ntua.gr). 5/4/2000 .