Ενοτητα 1 Flashcards
Να δώσετε τον ορισμό της δομής δεδομένων «Στοίβα»,
Απάντηση:
Στοίβα ονομάζεται μια δομή δεδομένων, στην οποία το σύνολο των στοιχείων της είναι διατεταγμένο με τέτοιο τρόπο, ώστε τα στοιχεία που βρίσκονται στην κορυφή της στοίβας λαμβάνονται πρώτα, ενώ αυτά που βρίσκονται στο βάθος της στοίβας λαμβάνονται τελευταία.
- Ποια μέθοδο επεξεργασίας δεδομένων χρησιμοποιεί η δομή δεδομένων «Στοίβα»;
Απάντηση:
Τη μέθοδο Τελευταίο Μέσα, Πρώτο Έξω, ή αλλιώς LIFO, από τα αρχικά των λέξεων «Last In First Out». Κατά τη μέθοδο αυτήν το δεδομένο που εισάγεται τελευταίο και βρίσκεται στην κορυφή της στοίβας, είναι αυτό που εξάγεται πρώτο. Αντίθετα, το δεδομένο που βρίσκεται στο βάθος της στοίβας είναι και αυτό που εξάγεται τελευταίο,
- α. Πώς ονομάζονται οι κύριες λειτουργίες που εκτελούνται στη δομή δεδομένων «Στοίβα»;
β. Ποια λειτουργία επιτελούν και τι πρέπει να ελέγχεται πριν την εκτέλεσή τους
Απάντηση:
Στη δομή δεδομένων «Στοίβα» χρησιμοποιούνται δύο λειτουργίες
•η ώθηση (push) με την οποία εισάγουμε ένα στοιχείο στην κορυφή της στοίβας και
•η απώθηση (pop) με την οποία αφαιρούμε ένα στοιχείο από την κορυφή της στοίβας
Β Βλέπε 230η και 231η ερώτηση θεωρίας.
- Τι πρέπει να προσέχουμε κατά την εκτέλεση της λειτουργίας της ώθησης ενός στοιχείου στη «Στοίβα 》
Κατά την εκτέλεση της λειτουργίας της ώθησης ενός στοιχείου στη στοίβα, πρέπει να εξετάζουμε αν αυτή είναι γεμάτη δηλαδή αν υπάρχει διαθέσιμος χώρος, ώστε να μπορούμε να τοποθετήσουμε το στοιχείο σε αυτήν. Διαφορετικά, αν η στοίβα είναι γεμάτη και προσπαθήσουμε να εισαγάγουμε ένα στοιχείο σε αυτήν, τότε λέμε ότι συμβαίνει υπερχείλιση της στοίβας
- Τι πρέπει να προσέχουμε κατά την εκτέλεση της λειτουργίας της απώθησης ενός στοιχείου από τη «Στοίβα»
Κατα την εκτέλεση της λειτουργίας της απώθησης ενός στοιχείου από τη στοίβα, πρέπει να εξετάζουμε αν υπάρχει ένα τουλάχιστον στοιχείο σε αυτήν για να εξαχθεί (να μην είναι κενή). Διαφορετικά, αν η στοίβα είναι κενή και προσπαθήσουμε να αφαιρέσουμε ένα στοιχείο από αυτήν, τότε λέμε ότι συμβαίνει υποχείλιση της στοίβας.
- Να περιγράψετε την υλοποίηση «Στοίβας» με τη βοήθεια μονοδιάστατου πίνακα.
Απάντηση:
Μια στοίβα μπορούμε να την υλοποιήσουμε με τη βοήθεια ενός μονοδιάστατου πίνακα Ν θέσεων. Για να τη διαχειριστούμε, χρειαζόμαστε μία βοηθητική μεταβλητή-δείκτη με την ονομασία top, η οποία δείχνει το στοιχείο που τοποθετήθηκε τελευταίο στη στοίβα, δηλαδή δείχνει το στοιχείο που υπάρχει στην κορυφή της. Στο διπλανό σχήμα χρησιμοποιούμε έναν πίνακα Ν θέσεων για τη δημιουργία μιας στοίβας, η οποία έχει μέσα δύο στοιχεία. Η μεταβλητή τορ έχει την τιμή 2 και δείχνει την κορυφή της στοίβας.
Ν []
• []
• []
3[]
2[Β] <-top=2
1[Α]
Υλοποιηση στοίβας με πίνακα
- Να δώσετε τον ορισμό της δομής δεδομένων «Ουρά».
Ουρά ονομάζεται μια δομή δεδομένων στην οποία το σύνολο των στοιχείων είναι διατεταγμένο με τέτοιο τρόπο, ώστε τα στοιχεία που τοποθετήθηκαν πρώτα στην ουρά να λαμβάνονται επίσης πρώτα.
- Ποια μέθοδο επεξεργασίας δεδομένων χρησιμοποιεί η δομή δεδομένων «Ουρά»;
Απάντηση:
Τη μέθοδο Πρώτο Μέσα, Πρώτο Έξω, ή αλλιώς FIFO, από τα αρχικά των λέξεων «First In First Out». Κατά τη μέθοδο αυτήν το δεδομένο που εισάγεται πρώτο, είναι αυτό που εξάγεται πρώτο. Αντίθετα, το δεδομένο που βρίσκεται στο τέλος της ουράς είναι και αυτό που εξάγεται τελευταίο.
- Ποιες είναι οι κύριες λειτουργίες στη δομή δεδομένων «Ουρά»;
Στη δομή δεδομένων ουρά χρησιμοποιούνται δύο λειτουργίες:
•η εισαγωγή (enqueue) ενός στοιχείου στο πίσω άκρο της ουράς και
•η εξαγωγή (dequeue) ενός στοιχείου από το μπροστινό άκρο της ουράς.
- Τι πρέπει να προσέχουμε κατά την εκτέλεση της λειτουργίας της εισαγωγής ενός στοιχείου στην «Ουρά》
Κατά την εκτέλεση της λειτουργίας της εισαγωγής ενός στοιχείου στην ουρά, πρέπει να εξετάζουμε αν υπάρχει διαθέσιμος χώρος στην ουρά (να μην είναι γεμάτη), για να τοποθετήσουμε το στοιχείο σε αυτήν.
- Τι πρέπει να προσέχουμε κατά την εκτέλεση της λειτουργίας της εξαγωγής ενός στοιχείου από την «Ουρά»;
Απάντηση:
Κατά την εκτέλεση της λειτουργίας της εξαγωγής ενός στοιχείου από την ουρά πρέπει να εξετάζουμε αν υπάρχει ένα τουλάχιστον στοιχείο σε αυτήν για να εξαχθεί, δηλαδή η ουρά να μην είναι άδεια.
- Να εξηγήσετε πώς γίνεται η υλοποίηση της δομής δεδομένων «Ουρά» με τη βοήθεια ενός μονοδιάστατου πίνακα.
Τη δομή δεδομένων «Ουρά» μπορούμε να την υλοποιήσουμε με τη βοήθεια ενός μονοδιάστατου πίνακα Ν θέσεων και για να τη διαχειριστούμε, θα χρησιμοποιήσουμε δύο δείκτες: τον δείκτη «εμπρός (front)», που δείχνει το πρώτο στοιχείο της ουράς, και τον δείκτη «πίσω (rear)», που δείχνει το τελευταίο στοιχείο της ουράς. Αν στην ουρά έχουν εισαχθεί τα στοιχεία 50, 70, 90, τότε η κατάσταση της ουράς και οι τιμές των δεικτών απεικονίζονται δίπλα.
- ……….. Ν
[50][70][90][] [ ][]
^ ^
| |
Front =1 rear=3
- ……….. Ν
- Τι είναι η «διεύθυνση επιστροφής» κατά την κλήση ενός υποπρογράμματος,
Απάντηση:
Η διεύθυνση επιστροφής είναι η αμέσως επόμενη διεύθυνση του κύριου προγράμματος στην οποία θα επιστρέψει ο έλεγχος εκτέλεσης του προγράμματος μετά την ολοκλήρωση της εκτέλεσης ενός υποπρογράμματος.
- Τι είναι η «στοίβα χρόνου εκτέλεσης»;
Απάντηση:
Η στοίβα χρόνου εκτέλεσης χρησιμοποιείται κατά την κλήση ενός υποπρογράμματος και είναι μία στοίβα στην οποία αποθηκεύεται από τον μεταφραστή η διεύθυνση επιστροφής, δηλαδή η αμέσως επόμενη διεύθυνση του κύριου προγράμματος στην οποία θα επιστρέψει μετά την κλήση του υποπρογράμματος.
- Ποιες δομές δεδομένων γνωρίζετε, στις οποίες οι κόμβοι δεν είναι απαραίτη το να κατέχουν συνεχόμενες θέσεις μνήμης;
Απάντηση:
Δομές δεδομένων, στις οποίες οι κόμβοι δεν είναι απαραίτητο να κατέχουν συνεχόμενες θέσεις μνήμης είναι οι λίστες, τα δέντρα και οι γράφοι.
- Οι δομές δεδομένων, λίστες, δέντρα και οι γράφοι είναι στατικές ή δυναμικές δομές δεδομένων;
Γνωρίζουμε ότι τα στοιχεία των δυναμικών δομών δεν αποθηκεύονται σε συνεχόμενες θέσεις μνήμης. Επειδή, στις λίστες, τα δέντρα και στους γράφους, οι κόμβοι από τους οποίους αποτελούνται δεν είναι απαραίτητο να κατέχουν συνεχόμενες θέσεις μνήμης, μπορούμε να πούμε ότι είναι δυναμικές δομές δεδομένων.
- Τι είναι μια συνδεδεμένη λίστα;
Απάντηση:
Μια «συνδεδεμένη λίστα» είναι ένα σύνολο κόμβων που συνήθως βρίσκονται σε απομακρυσμένες θέσεις μνήμης και είναι γραμμικά διατεταγμένοι (ο ένας μετά τον άλλον).
- Η «λίστα» είναι γραμμική ή μη γραμμική δομή δεδομένων;
Απάντηση:
Η λίστα είναι γραμμική δομή δεδομένων γιατί τα δεδομένα της ακολουθούν μια σειρά, δηλαδή, ο δεύτερος κόμβος θα είναι πάντα μετά τον πρώτο κόμβο και πριν από τον τρίτο κόμβο κ.ο.κ. (ισχύει η σχέση της συνεχόμενης λογικής γειτονικότητας των στοιχείων της).
- Τι είναι ένας «δείκτης» γενικά στον προγραμματισμό;
Απάντηση:
Ο δείκτης γενικά, είναι ένας ιδιαίτερος τύπος δεδομένων που προσφέρεται στις σύγχρονες γλώσσες προγραμματισμού. Δεν λαμβάνει αριθμητικές τιμές όπως ακέραιες πραγματικές, αλλά οι τιμές που λαμβάνει, είναι διευθύνσεις στην κύρια μνήμη και χρησιμοποιείται για τη σύνδεση των διαφόρων στοιχείων μιας δομής που είναι αποθηκευμένα σε μη συνεχόμενες θέσεις μνήμης.
- Πότε μια λίστα λέμε ότι είναι απλά συνδεδεμένη;
Απάντηση:
Μία λίστα είναι απλά συνδεδεμένη όταν μπορούμε να κινηθούμε σε αυτήν προς μια κατεύθυνση ξεκινώντας πάντα από τον πρώτο κόμβο και μετακινούμενοι προς τον τελευταίο.
- Από τι αποτελείται ένας κόμβος στην απλά συνδεδεμένη λίστα;
Ένας κόμβος μιας λίστας αποτελείται από δύο τμήματα (πεδία) και η δομή του είναι
Το πρώτο τμήμα είναι το πεδίο «Δεδομένα», το οποίο περιέχει τα δεδομένα και το δεύτερο είναι το πεδίο «Δείκτης», το οποίο φιλοξενεί τη διεύθυνση του επόμενου κόμβου με τον οποίο συνδέεται, δηλαδή περιέχει έναν δείκτη (pointer) που δείχνει στον επόμενο κόμβο.
Δεδομένα | Δείκτης |
- Από τι αποτελείται ένας κόμβος στην απλά συνδεδεμένη λίστα;
Ένας κόμβος μιας λίστας αποτελείται από δύο τμήματα (πεδία) και η δομή του είναι
Το πρώτο τμήμα είναι το πεδίο «Δεδομένα», το οποίο περιέχει τα δεδομένα και το δεύτερο είναι το πεδίο «Δείκτης», το οποίο φιλοξενεί τη διεύθυνση του επόμενου κόμβου με τον οποίο συνδέεται, δηλαδή περιέχει έναν δείκτη (pointer) που δείχνει στον επόμενο κόμβο.
Δεδομένα | Δείκτης |
- α. Τι τιμές λαμβάνει το κάθε ένα πεδίο, ενός κόμβου μιας απλά συνδεδε μένης λίστας;
β. Γιατί χρησιμοποιείται το πεδίο «Δείκτης» μιας απλά συνδεδεμένης λίστας και πως τον απεικονίζουμε;
Το πεδίο «Δεδομένα» μπορεί να περιέχει μία ή περισσότερες αλφαριθμητικές ή αριθμητικές πληροφορίες. Το πεδίο «Δείκτης» δεν λαμβάνει αριθμητικές τιμές (ακέραιες, πραγματικές), αλλά οι τιμές του είναι διευθύνσεις στην κύρια μνήμη και συγκεκριμένα φιλοξενεί τη διεύθυνση του επόμενου κόμβου με τον οποίο συν δέεται, δηλαδή περιέχει έναν δείκτη (pointer) που δείχνει στον επόμενο κόμβο.
β. Το πεδίο «Δείκτης» χρησιμοποιείται για τη σύνδεση των στοιχείων (κόμβων) της λίστας που είναι αποθηκευμένα σε μη συνεχόμενες θέσεις μνήμης, δείχνοντας τον επόμενο κόμβο της λίστας. Τον απεικονίζουμε συμβολικά με ένα βέλος για να δηλώσουμε τη σύνδεση μεταξύ του προηγούμενου και το επόμενου κόμβου.
- Τι είναι η μεταβλητή/δείκτης «Κεφαλή» σε μια απλά συνδεδεμένη λίστα;
Απάντηση:
Για να προσπελάσουμε τους κόμβους μιας λίστας πρέπει να γνωρίζουμε τη διεύθυνση δηλαδή τη θέση μνήμης του πρώτου κόμβου της λίστας. Η διεύθυνση αυτή αποθηκεύεται σε μια ειδική μεταβλητή που ονομάζεται «Κεφαλή». Έτσι ο δείκτης/μεταβλητή «Κεφαλή (Head)» δείχνει στον πρώτο κόμβο μιας λίστας, δηλαδή περιέχει τη διεύθυνση του πρώτου κόμβου της λίστας.
- Τι τιμή έχει το πεδίο «Δείκτης» του τελευταίου κόμβου μιας απλά συν δεδεμένης λίστας;
Απάντηση:
Ο δείκτης του τελευταίου κόμβου μιας λίστας δε δείχνει σε κάποιον κόμβο, στην ουσία είναι ένας δείκτης στο κενό. Για να το δηλώσουμε αυτό λέμε ότι το πεδίο δείκτη του τελευταίου κόμβου έχει την τιμή NULL και τον αναπαριστούμε με το σύμβολο «●»,
- Να δώσετε ένα παράδειγμα μιας απλά συνδεδεμένης λίστας.
Απάντηση:
Στο παρακάτω σχήμα παρουσιάζεται μια απλά συνδεδεμένη λίστα με πέντε κόμβους που περιέχει ακέραιους αριθμούς.
[Κεφαλή]-
👇
[7][] ->[1][]->[9][]->[3][]->[5][●]
Στον δείκτη «Κεφαλή» υπάρχει η διεύθυνση του πρώτου κόμβου της λίστας. Σε κάθε κόμβο,στο πεδιο 《δεδομένο» υπάρχει ένας ακέραιος αριθμός που ειναι η αριθμητική πληροφορία που περιέχει και στο πεδίο «Δείκτης» περιέχεται η διεύθυνση του επόμενυ κομβου η οποία απεικονίζεται συμβολικά με ένα βέλος, ώστε να δείχει τη σύνδεση μεταξύ του προηγούμενου και το επόμενου κόμβου. Έτσι, στον πρώτο κόμβο, το πεδίο «Δεδομένο» περιέχει τον αριθμό 7 και ο δείκτης του πρώτου κόμβου δειχνει τον δεύτερο. Στον δεύτερο κόμβο, το πεδίο «Δεδομένο» περιέχει τον αριθμό 1 και ο δείκτης του δεύτερου κόμβου δειχνει στη διευθυνση του τριτου κκμβου κοκ. Ο δεικτης του τελευταιου κομβου εχει ως τιμη το NULL (σύμβολο «●») καθώς δεν δείχνει σε κάποιον επόμενο κόμβο
- Να εξηγήσετε πως γίνεται η προσπέλαση στους κόμβους μιας απλά συν δεδεμένης λίστας.
Απάντηση:
Οι κόμβοι μιας συνδεδεμένης λίστας δεν έχουν ονόματα και το μόνο που γνωρίζουμε για αυτούς είναι οι διευθύνσεις τους οι οποίες είναι αποθηκευμένες στους προηγούμενους κόμβους. Για να προσπελάσουμε τους κόμβους της λίστας αξιοποιούμε αυτές τις διευθύνσεις. Άμεση πρόσβαση έχουμε μόνο στον πρώτο κόμβο της λίστας μέσω της διεύθυνσης του η οποία βρίσκεται στον δείκτη «Κεφαλή». Για να εντοπίσουμε κάποιον από τους ενδιάμεσους κόμβους, ξεκινάμε από τον πρώτο κόμβο και ακολουθούμε τους δείκτες με τη σειρά μέχρι να φτάσουμε στον επιθυμητό κόμβο.