Skip to content

Unsorted Array

Alexandros edited this page Jun 21, 2021 · 2 revisions

Εισαγωγή

Για την αποθήκευση των λέξεων μέσα στον πίνακα θα γίνει χρήση ενός strcuct (Element). Η δομή έχει ως εξής: υπάρχει ένα πεδίου τύπου string και όνομα word που αποθηκεύει την λέξη αυτούσια επιπλέον, υπάρχει ένα πεδίο τύπου int και με όνομα appearances που αποθηκεύει τις εμφανίσεις της συγκεκριμένης λέξης μέσα στο αρχείο. Ο πίνακας που αποθηκεύει τις λέξεις θα υλοποιηθεί στον σωρό. Σαφέστερα, για την υλοποίηση του πίνακα θα χρησιμοποιηθούν δυο μεταβλητές τύπου int, η size που είναι το μέγεθος του πίνακα (δηλ. των θέσεων που διαθέτει ο πίνακας) και η μεταβλητή posOfLastElement που κρατάει την θέση του τελευταίου στοιχείου μέσα στον πίνακα. Σε περίπτωση όπου ο πίνακας γεμίσει με στοιχεία, καλείται η μέθοδος resize που μεγαλώνει το μέγεθος του πίνακα (διπλασιάζεται η size) έτσι ώστε να μην χαθούν λέξεις από το αρχείο.


Λειτουργίες

Εισαγωγή (insert)

Η μέθοδος (insert(string key)) αρχικά εξετάζει εάν υπάρχει ήδη η λέξη που πρόκειται να εισαχθεί, για αυτό τον έλεγχο καλείται η αναζήτηση που εντοπίζει την θέση της λέξης και την αποθηκεύει σε μια μεταβλητή. Στην περίπτωση που υπάρχει ήδη, η λέξη δεν εισάγεται ξανά στον πίνακα αλλά αυξάνεται ο αριθμός των εμφανίσεων της λέξης αυτής. Αντίθετα όταν δεν υπάρχει εισάγεται στον πίνακα θέτοντας παράλληλα των αριθμό των εμφανίσεων της λέξης σε ένα (1) και η posOfLastElement αυξάνεται κατά ένα (1). Τέλος, ελέγχεται εάν το size ισούται με posOfLastElement, ο έλεγχος αυτός γίνεται για να εξεταστεί εάν ο πίνακας γέμισε. Εάν έχει γεμίσει καλείται η μέθοδος resize.

Αναζήτηση (search)

Για την αναζήτηση θα χρησιμοποιηθεί η search και συγκεκριμένα η public, η μέθοδος αυτή επιστρέφει το πλήθος των εμφανίσεων της λέξης μέσα από τον πίνακα. Ουσιαστικά αυτή η μέθοδος δέχεται από την private search (σε αυτή την μέθοδο υλοποιείται η σειριακή αναζήτηση) τη θέση του στοιχείου μέσα στον πίνακα, όπου την αποθηκεύει και την χρησιμοποιεί για να επιστρέψει το πλήθος των εμφανίσεων της λέξης.

Διαγραφη (remove)

Η μέθοδος που υλοποιεί την διαγραφή (remove(string key)) λειτουργεί ως εξής: αρχικά γίνεται κλήση της συνάρτησης αναζήτησης ώστε να βρεθεί η θέση της λέξης που πρόκειται να διαγραφεί. Σε περίπτωση που η λέξη εμφανίζεται περισσότερες από μια φορές, το πεδίο του struct που αποθηκεύει τον αριθμό των εμφανίσεων της λέξης (appearances). Εάν η τιμή του πεδίου πριν την κλήση της συνάρτησης είναι ένα (1) τότε, αφού κληθεί αφαιρείται η λέξη από τον πίνακα, τα στοιχεία μετακινούνται κατά μια θέση προς τα αριστερά και η μεταβλητή που αποθηκεύει την θέση του τελευταίου στοιχειού πίνακα (posOfLastElement) μειώνεται κατά ένα (1). Τέλος, εάν πραγματοποιηθεί η διαγραφή επιστρέφεται η λογική τιμή true ενώ εάν η λέξη δεν υπάρχει στον πίνακα επιστρέφεται η λογική τιμή false.