📘 Δομές Δεδομένων στην ΑΕΠΠ: Ο Πλήρης Οδηγός με Παραδείγματα σε ΓΛΩΣΣΑ
Οι δομές δεδομένων είναι τα θεμέλια κάθε αλγορίθμου - Στοίβα, Ουρά, Λίστες, Δέντρα, Γράφοι
Αν ο προγραμματισμός είναι η τέχνη του λύνειν προβλημάτων, οι δομές δεδομένων είναι τα εργαλεία που οργανώνουν τα «τούβλα» της λύσης. Στο σχολικό βιβλίο της ΑΕΠΠ (Κεφάλαιο 3), η θεωρία παρουσιάζεται με σαφήνεια, αλλά η μετάβαση από τη θεωρία στον κώδικα απαιτεί προσοχή, ειδικά όταν γράφουμε σε ΓΛΩΣΣΑ, μια γλώσσα που δεν διαθέτει δυναμική μνήμη ή πραγματικούς δείκτες.
Σε αυτό το άρθρο θα αναλύσουμε βήμα-βήμα όλο το Κεφάλαιο 3, θα εξηγήσουμε πώς μεταφέρονται οι έννοιες στη ΓΛΩΣΣΑ και θα δούμε πλήρη, συντακτικά σωστά παραδείγματα που σε προετοιμάζουν τόσο για τις Πανελλήνιες όσο και για την πραγματική προγραμματιστική σκέψη.
📖 Σε αυτόν τον οδηγό:
- 🔍 Τι είναι οι Δομές Δεδομένων
- ⚙️ Οι 8 Βασικές Λειτουργίες
- 📊 Στατικές vs Δυναμικές Δομές
- 🥞 Στοίβα (Stack) – LIFO με Κώδικα
- 🚶 Ουρά (Queue) – FIFO με Κώδικα
- 🔗 Συνδεδεμένες Λίστες & Προσομοίωση Δεικτών
- 🌳 Δέντρα & Δυαδικά Δέντρα Αναζήτησης (BST)
- 🌐 Γράφοι – Η Πιο Γενική Δομή
- 🧭 Πρακτικός Οδηγός Επιλογής Δομής
- 💡 Tips για Πανελλήνιες
- ❓ Συχνές Ερωτήσεις (FAQ)
🎥 Επεξηγηματικό Βίντεο για Δομές Δεδομένων
Δείτε το παρακάτω βίντεο για μια οπτική κατανόηση των δομών δεδομένων πριν προχωρήσετε στον κώδικα:
📌 Το βίντεο εξηγεί με παραστατικό τρόπο τις βασικές δομές δεδομένων (Στοίβα, Ουρά, Λίστα, Δέντρο, Γράφος)
🔍 1. Δεδομένα, Πληροφορία & Γιατί μελετάμε Δομές;
Τα δεδομένα είναι ακατέργαστα γεγονότα. Όταν τα επεξεργαστούμε με έναν αλγόριθμο, παράγουμε πληροφορία που οδηγεί σε αποφάσεις. Αυτός ο κύκλος (δεδομένα → αλγόριθμος → πληροφορία → απόφαση → νέα δεδομένα) είναι η καρδιά της Πληροφορικής.
Η Θεωρία Πληροφοριών μελετά τη μέτρηση, κωδικοποίηση και μετάδοση της πληροφορίας, ενώ η Πληροφορική προσεγγίζει τα δεδομένα από 4 σκοπιές:
- Υλικού (δυαδική, ASCII, συμπλήρωμα 2 κ.λπ.)
- Γλωσσών Προγραμματισμού (τύποι μεταβλητών, μεταγλώττιση)
- Δομών Δεδομένων (σύνολο δεδομένων + επιτρεπτές λειτουργίες)
- Ανάλυσης Δεδομένων (βάσεις δεδομένων, μοντελοποίηση, αναπαράσταση γνώσης)
📌 Συμπέρασμα: Η δομή δεδομένων δεν είναι απλά «ένας πίνακας». Είναι ένας οργανισμός που καθορίζει πώς αποθηκεύονται, πώς προσπελαύνονται και πώς μεταβάλλονται τα δεδομένα.
⚙️ 2. Τι είναι Δομή Δεδομένων & Οι 8 Βασικές Λειτουργίες
Ορισμός (3.3): Δομή δεδομένων είναι ένα σύνολο αποθηκευμένων δεδομένων που υφίστανται επεξεργασία από ένα σύνολο λειτουργιών. Αποτελείται από κόμβους.
Οι βασικές λειτουργίες είναι 8:
| Λειτουργία | Περιγραφή | >||
|---|---|---|---|
| Προσπέλαση | Ανάγνωση/τροποποίηση κόμβου | ||
| Εισαγωγή | Προσθήκη νέου κόμβου | ||
| Διαγραφή | Αφαίρεση κόμβου | ||
| Αναζήτηση | Εντοπισμός κόμβου με συγκεκριμένη ιδιότητα | ||
| Ταξινόμηση | Διάταξη κατά αύξουσα/φθίνουσα σειρά | ||
| Αντιγραφή | Μεταφορά κόμβων σε άλλη δομή | ||
| Συγχώνευση | Ένωση δομών | ||
| Διαχωρισμός | Αντίστροφη της συγχώνευσης |
| Χαρακτηριστικό | Στατικές | Δυναμικές | >|
|---|---|---|---|
| Μέγεθος | Καθορίζεται κατά τον προγραμματισμό/μετάφραση | Μεταβάλλεται κατά την εκτέλεση | |
| Μνήμη | Συνεχόμενες θέσεις | Μη συνεχόμενες (δείκτες) | |
| Παράδειγμα | Πίνακες στη ΓΛΩΣΣΑ | Λίστες, Δέντρα, Γράφοι | |
| Ευελιξία | Περιορισμένη | Υψηλή |
| Πίνακας | Ρόλος | >||
|---|---|---|---|
ΔΕΔ[100] |
Αποθηκεύει την τιμή του κόμβου | ||
ΕΠΟΜ[100] |
Δείκτης στον επόμενο κόμβο (θέση) | ||
ΑΡΧΗ |
Δείχνει στον πρώτο κόμβο | ||
ΕΛΕΥΘ |
Διαχειρίζεται τις κενές θέσεις |
| Τύπος | Περιγραφή | Παράδειγμα | >
|---|---|---|
| Μη κατευθυνόμενος | Ακμές αμφίδρομες | Facebook friendships |
| Κατευθυνόμενος | Ακμές μονόδρομες | Twitter follows, web links |
📝 Αναπαράσταση με Πίνακα Γειτνίασης (ΓΛΩΣΣΑ)
ΠΡΟΓΡΑΜΜΑ Γράφος_Πίνακας
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΟΙ: Γ[5,5], i, j
ΑΡΧΗ
! Αρχικοποίηση σε 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 5
Γ[i,j] ← 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Προσθήκη ακμών (μη κατευθυνόμενος)
Γ[1,2] ← 1
Γ[2,1] ← 1
Γ[2,3] ← 1
Γ[3,2] ← 1
ΓΡΑΨΕ 'Πίνακας γειτνίασης:'
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 5
ΓΡΑΨΕ Γ[i,j], ' '
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
💡 Σημαντική σημείωση για ΓΛΩΣΣΑ: Η ΓΛΩΣΣΑ υποστηρίζει δισδιάστατους πίνακες.
🌐 Εφαρμογές: Χάρτες/δρομολόγηση (Dijkstra, A*), δίκτυα, κοινωνικά γραφήματα, εξαρτήσεις έργων (PERT/CPM).
🧭 9. Πρακτικός Οδηγός Επιλογής Δομής (ΑΕΠΠ & Εξετάσεις)
| Πρόβλημα / Απαίτηση | Προτεινόμενη Δομή | Λόγος |
|---|---|---|
| Σταθερό πλήθος, τυχαία πρόσβαση, ταξινόμηση | Πίνακας | O(1) πρόσβαση, εύκολη υλοποίηση |
| Undo/Redo, αναδρομή, ισορροπία παρενθέσεων | Στοίβα | LIFO φύση |
| Εξυπηρέτηση με σειρά άφιξης, buffers | Ουρά | FIFO φύση |
| Συχνές εισαγωγές/διαγραφές, άγνωστο μέγεθος | Συνδεδεμένη Λίστα | Δυναμική, O(1) αλλαγές δείκτη |
| Ιεραρχία, γρήγορη αναζήτηση, λεξικά | BST / Δέντρο | O(log n) αναζήτηση (ισορροπημένο) |
| Δίκτυα, σχέσεις πολλών-προς-πολλούς | Γράφος | Γενικότερη δομή, μοντελοποίηση πραγματικότητας |
⚠️ Κανόνας Πανελληνίων: Η εκφώνηση συνήθως «προδίδει» τη δομή μέσω των πράξεων που ζητά.
- «εισαγωγή μόνο στην αρχή» → Στοίβα ή Λίστα
- «διατήρηση σειράς άφιξης» → Ουρά
- «γρήγορη εύρεση στοιχείου» → Πίνακας (μικρός) ή BST
- «συνδέσεις μεταξύ κόμβων» → Γράφος
💡 10. Tips για Πανελλήνιες & Εξετάσεις ΑΕΠΠ
- ✍️ Υλοποίησε από το μηδέν ουρά, στοίβα με έλεγχο ορίων και BST αναζήτηση.
- 🔍 Κάνε hand-trace (πίνακας + δείκτες βήμα-βήμα) για κάθε άσκηση. Είναι το μυστικό για τα θέματα 3 & 4.
- 📚 Μελέτησε θέματα 2015–2025 που αφορούν στοίβες/ουρές με παράλληλους πίνακες.
- 🌳 Προσομοίωσε δέντρα με 3 πίνακες (ΤΙΜΗ, ΑΡΙΣΤ, ΔΕΞΙ) και γράψε αναδρομική διάσχιση (προ-ενδο-μετα-διατεταγμένη).
- 💻 Μη φοβάσαι τον ψευδοκώδικα: Η ΓΛΩΣΣΑ είναι εργαλείο σκέψης. Αν καταλάβεις τη λογική, η μετάβαση σε Python/C++ είναι άμεση.
❓ 11. Συχνές Ερωτήσεις (FAQ)
🔹 Ποια δομή είναι πιο γρήγορη για αναζήτηση;
Ο πίνακας με δυαδική αναζήτηση (O(log n)) ή το ισορροπημένο BST (O(log n)). Ο πίνακας έχει ταχύτερη πρόσβαση αλλά απαιτεί ταξινόμηση.
🔹 Πότε χρησιμοποιούμε συνδεδεμένη λίστα αντί για πίνακα;
Όταν έχουμε συχνές εισαγωγές/διαγραφές και άγνωστο πλήθος στοιχείων. Σε πίνακα, οι εισαγωγές/διαγραφές απαιτούν μετακινήσεις O(n).
🔹 Μπορώ να υλοποιήσω αναδρομή στη ΓΛΩΣΣΑ;
Ναι! Η ΓΛΩΣΣΑ υποστηρίζει αναδρομικές συναρτήσεις. Χρησιμοποιείται συχνά σε αλγορίθμους δέντρων (π.χ. προδιατεταγμένη διάσχιση).
🔹 Πώς προσομοιώνω δείκτες στη ΓΛΩΣΣΑ;
Με ακέραιες μεταβλητές που κρατούν θέσεις πίνακα. Η τιμή 0 συμβολίζει το null (κανένας κόμβος).
🔹 Τι είναι η κυκλική ουρά και πότε χρησιμοποιείται;
Κυκλική ουρά είναι όταν το rear μετά το τέλος του πίνακα πάει στην αρχή (χρησιμοποιώντας mod). Χρησιμοποιείται για να αξιοποιηθεί πλήρως η μνήμη του πίνακα.
🏆 12. Συμπέρασμα
Οι δομές δεδομένων δεν είναι απλά «κεφάλαιο για το τεστ». Είναι ο αλγοριθμικός σου χάρτης.
Μόλις μάθεις να διαβάζεις ένα πρόβλημα και να το αντιστοιχίζεις στη σωστή δομή, η σκέψη σου θα αλλάξει ριζικά. Στην ΑΕΠΠ ίσως γράφεις λίγες παραπάνω γραμμές για τη διαχείριση δεικτών με πίνακες, αλλά αυτή η διαδικασία είναι που χτίζει τη διαίσθηση που θα σε ακολουθήσει σε κάθε γλώσσα προγραμματισμού.
🧪 13. Εξάσκηση & Exam Boost
✏️ Άσκηση 1: Έλεγχος Παρενθέσεων (Στοίβα)
Να ελέγξετε αν μια ακολουθία παρενθέσεων είναι σωστά τοποθετημένη.
ΠΡΟΓΡΑΜΜΑ Παρενθεσεις
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: s[100]
ΑΚΕΡΑΙΕΣ: top, i, n
ΑΡΧΗ
top ← 0
ΓΡΑΨΕ 'Δώσε πλήθος χαρακτήρων:'
ΔΙΑΒΑΣΕ n
ΓΡΑΨΕ 'Δώσε χαρακτήρες:'
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΔΙΑΒΑΣΕ s[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΑΝ s[i] = '(' ΤΟΤΕ
top ← top + 1
ΑΛΛΙΩΣ_ΑΝ s[i] = ')' ΤΟΤΕ
ΑΝ top = 0 ΤΟΤΕ
ΓΡΑΨΕ 'Λάθος'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΤΕΛΟΣ_ΑΝ
top ← top - 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ top = 0 ΤΟΤΕ
ΓΡΑΨΕ 'Σωστό'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λάθος'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
✏️ Άσκηση 2: Ουρά Εξυπηρέτησης
Να προσομοιωθεί ουρά πελατών όπου γίνεται εισαγωγή και εξαγωγή.
front ← 0 rear ← 0 ! Εισαγωγή rear ← rear + 1 ΟΥ[rear] ← x ! Εξαγωγή ΑΝ front = rear ΤΟΤΕ front ← 0 rear ← 0 ΑΛΛΙΩΣ front ← front + 1 ΤΕΛΟΣ_ΑΝ
⚠️ Συχνές Παγίδες Πανελληνίων
- ❌ Ξεχνάς overflow / underflow
- ❌ Μπερδεύεις front και rear
- ❌ Νομίζεις ότι γίνεται πραγματική διαγραφή από πίνακα
- ❌ Δεν μηδενίζεις front/rear όταν αδειάζει η ουρά
- ❌ Ξεχνάς ότι στη στοίβα αλλάζει μόνο το top
📊 Cheat Sheet Δομών Δεδομένων
| Δομή | Λογική | Δείκτες | Χρήση |
|---|---|---|---|
| Στοίβα | LIFO | top | Undo |
| Ουρά | FIFO | front/rear | Εξυπηρέτηση |
| Λίστα | Δυναμική | δείκτες | Εισαγωγές |
| BST | Ταξινόμηση | αριστ/δεξί | Αναζήτηση |
| Γράφος | Γενικός | - | Δίκτυα |
🧠 Interactive Mini Quiz
1. Ποια δομή χρησιμοποιείται για recursion;
2. Τι σημαίνει overflow;
3. Πότε προτιμάμε συνδεδεμένη λίστα;
4. Τι δείχνει το rear;
5. Ποια δομή χρησιμοποιείται για δίκτυα;
📚 Διαβάστε επίσης:
📚 Σας άρεσε το άρθρο;
Μοιραστείτε το με συμμαθητές που προετοιμάζονται για ΑΕΠΠ!
#ΔομέςΔεδομένων #ΑΕΠΠ #ΓΛΩΣΣΑ #Στοίβα #Ουρά #ΣυνδεδεμένηΛίστα #Δέντρα #Γράφοι #Αλγόριθμοι #Πανελλήνιες
Δεν υπάρχουν σχόλια :
Δημοσίευση σχολίου