Αρχεία υλοποίησης : main.c, BulkTreeSimple.c, BulkTreeAVL.c, BulkTree.h, TStoixeioyTree.c, TStoixeioyTree.h Ενδεικτικά αποτελέσματα : atoma-random-out.txt, atoma-sorted-out.txt, pinakas-xronometrisewn.txt, simple-AVL.txt Όνομα/Επώνυμο : Νικόλαος Μπεγέτης 1115200700281 *********************************************************************************************************** Λειτουργικότητα: ****************** Το πρόγραμμα είναι η επέκταση-βελτίωση της προσομοίωση της ουράς πελατών μίας τράπεζας χρησιμοποιώντας λίστες με δείκτες για εξοικείωση με τις λίστες και τις εφαρμογές τους. Υλοποίηση Ζητουμένων: 1. Το πρόγραμμα υλοποιείται με τον ΑΤΔ Δέντρο, και πιο συγκεκριμένα υλοποιείται με δύο τρόπους (με απλό ΔΔΑ και με AVL ΔΔΑ) και αφορά τη διαχείριση 2 αρχείων που περιέχουν 10.000 ονοματεπώνυμα(το ένα αρχείο ταξινομημένο και το άλλο random) και ενός αρχείου 1.000 ατόμων από όπου γίνεται αναζήτηση των ονομάτων στο δέντρο, στο οποίο κάθε κόμβος του περιέχει ένα όνομα και ένα επίθετο. 2. Τα αρχεία που αναπτύχθηκαν είναι: main.c: όπου δημιουργείται ένα κενό BulkTree, έπειτα εισάγει στους κόμβους του τα ονοματεπώνυμα από τα αρχεία(πρώτα από το random αρχείο και μετά το πέρας όλων των διαδικασιών από το sorted), μετά διατρέχει το δέντρο και εκτυπώνει με αλφαβητική σειρά στο αρχείο atoma-random-out.txt τα ταξινομημένα πλέον ονόματα. Στη συνέχεια αναζητά τα άτομα από το αρχείο atoma-search.txt(δίνεται) στους κόμβους του δέντρου και τέλος μετά το πέρας όλων των παραπάνω καταστρέφει το δέντρο. Η ίδια διαδικασία επαναλαμβάνεται για άλλη μία φορά. Αυτή τη φορά όμως εισάγονται στους κόμβους του δέντρου τα στοιχεία από το atoma-sorted.txt και έπειτα οι εκτυπώσεις γίνονται στο atoma-sorted-out.txt. Τέλος να σημειωθεί ότι η συνάρτηση κατασκευής επιστρέφει ένα πίνακα με τους χρόνους που κάνει για να κατασκευάσει 2^n κόμβους, όπου 2^n: 2,4,8,...,8192 και όλο το δέντρο(10.000 άτομα) και οι συναρτήσεις εκτύπωσης και αναζήτησης επιστρέφουν τους συνολικούς χρόνους ολοκλήρωσης τους. Τα δεδομένα αυτά εκτυπώνονται στο τέλος στο stdout(οθόνη) και στο αρχείο pinakas-xronometrisewn.txt. BulkTree.h: περιέχει τα πρωτότυπα των συναρτήσεων των αρχείων BulkTreeSimple.c και BulkTreeAVL.c που χrησιμοποιούνται άμεσα από την main(η οποία την κάνει include) και κάνει include το αρχείο κεφαλίδα TstoixeioyTree.h για τον τύπο στοιχείου και τις πράξεις του. BulkTreeSimple.c και BulkTreeAVL.c: υλοποιούν τις 5 πράξεις(δημιουργία, καταστροφή, κατασκευή, εκτύπωση και αναζήτηση) που ορίζονται στο BulkTree.h και στην υλοποίηση τους χρησιμοποιούν τις συναρτήσεις που ορίζονται στα ch8_BSTpointer.h και ch8_AVLpointer.h(τα οποία θεωρούνται δεδομένα και δεν συμπεριλαμβάνω στο συμπιεσμένο φάκελο). Ακόμα μέσα στα αρχεία ορίζονται οι δομές της ρίζας του δέντρου και των κόμβων. Τέλος υπάρχουν άλλες 2 συναρτήσεις που βοηθάνε στην ταξινόμηση και εκτύπωση των στοιχείων σε αρχείο. TStoixeioyTree.h, TStoixeioyTree.c: τα αρχεία περιλαμβάνουν αντίστοιχα τις δηλώσεις και τις υλοποιήσεις των πράξεων των στοιχείων του δέντρου καθώς και τα περιεχόμενα των στοιχείων(επώνυμο, όνομα). Τα αρχεία ch8_BSTpointer2.h, ch8_BSTpointer2.c, ch8_AVLpointer.h, ch8_AVLpointer.c, atoma-random.txt, atoma-sorted.txt και atoma-search.txt θεωρούνται δεδομένα και δεν συμπεριλαμβάνονται στο συμπιεσμένο φάκελο. Να σημειωθεί ότι η main πρέπει να μεταγλωττιστεί και εκτελεστεί 2 φορές(μία με τα αρχεία BulkTreeSimple.c και ch8_BSTpointer2 και άλλη μία με τα αρχεία BulkTreeAVL.c και ch8_AVLpointer.c) 3. Επίσης παραδίδονται ενδεικτικά αποτελέσματα τα οποία ούτως ή άλλως θα κατασκευάζονταν μέσα στη main.c. Αυτά είναι: atoma-random-out.txt, atoma-random-out.txt, atoma-sorted-out.txt και pinakas-xronometrisewn.txt. Τα 2 πρώτα είναι τα αρχεία που ζητούνται από την εκφώνηση για την ταξινομημένη εκτύπωση σε αρχείο και το τρίτο περιλαμβάνει τον πίνακα με τους χρόνους όπως διαμορφώθηκε μετά από 2 εκτελέσεις, η πρώτη με απλό δέντρο και η δεύτερη με AVL. Τα δεδομένα αυτά τα χρησιμοποίησα και στο αρχείο simple-AVL.txt στο οποίο συμπεριλαμβάνω και εκτενέστερα σχόλια για τα αποτελέσματα. Να σημειωθεί ότι επειδή η κατασκευή γίνεται από το ίδιο πρόγραμμα και για AVL και για απλά δέντρα η συνάρτηση κατασκευής των αρχείων έχει mode=a ώστε να γίνεται επέκταση των αρχείων και όχι w(που διαγράφονται τα παλαιότερα δεδομένα του αρχείου για να γραφούν τα καινούργια). Ο λόγος είναι για να μπορεί ο χρήστης να κάνει συγκρίσεις μέσα στο ίδιο αρχείο και επειδή το mode=a είναι σαφώς πιο γρήγορο από το mode= w, αφού το μόνο που κάνει είναι να επεκτείνει και όχι να διαγράφει και να ξαναγράφει Επίσης για να καταφέρω να δημιουργώ 2 διαφορετικά αρχεία χωρίς να χρειαστεί να αλλάξω τη συνάρτηση void TStree_writeValue(TStoixeioyTree Elem) προσθέτοντας της άλλο ένα όρισμα(που δεν επιτρέπεται γιατί επηρεάζει τα αρχεία που δεν πρέπει να αλλαχθούν) χρησιμοποίησα μία static μεταβλητή. extras: ********* 1. Δημιουργία και χρησιμοποίηση της συνάρτησης "void inspectQbyOrder (BankOurasPtr oura);" η οποία εμφανίζει την κανονική ουρά των πελατών ή/και των ΑΜΕΑ(ανάλογα με την κλήση) όπως διαμορφώνεται μετά τις αλλαγές και εκτύπωση αυτής στην οθόνη κατά το τρέξιμο του εκτελέσιμου. Οδηγίες χρήσης προγράμματος: ****************************** Το πρόγραμμα μεταγλωττίζεται για το απλό δέντρο με την εντολή: gcc -ο tree main.c BulkTreeSimple.c ch8_BSTpointer2.c TStoixeioyTree.c -lm και για το AVL: gcc -o tree main.c BulkTreeAVL.c ch8_AVLpointer.c TStoixeioyTree.c -lm και το εκτελέσιμο που δημιουργείται και στις 2 περιπτώσεις τρέχει με το ./tree. Να τονίσω ότι επειδή έκανα χρήση της βιβλιοθήκης στον linker κατά την μεταγλώττιση πρέπει να μπαίνει και το επίθεμα -lm. Περιβάλλον υλοποίησης και Δοκιμών: ************************************ Το πρόγραμμα αναπτύχθηκε σε gcc σε linux και δοκιμάστηκε και στα linux και τα sun της σχολής