📝 Λίστες και Συνδεδεμένες Λίστες
🗂️ Τι είναι οι Λίστες;
Μια λίστα είναι μια συλλογή από αντικείμενα ίδιου τύπου, όπως λέξεις, αριθμοί ή ονόματα. Είναι ένας πολύ εύχρηστος τρόπος αποθήκευσης δεδομένων, όπως οι λίστες τραγουδιών ή επαφών που χρησιμοποιούμε στην καθημερινότητά μας.
⚙️ Προσθήκη και Διαγραφή σε Λίστες
Οι στατικοί πίνακες έχουν ένα σταθερό μέγεθος, γεγονός που δυσκολεύει την προσθήκη ή τη διαγραφή στοιχείων. Αν θέλουμε να προσθέσουμε νέα στοιχεία σε έναν γεμάτο πίνακα, πρέπει να δημιουργήσουμε έναν νέο μεγαλύτερο πίνακα και να αντιγράψουμε τα δεδομένα.
Περιορισμοί Στατικού Πίνακα
🔗 Συνδεδεμένες Λίστες
Οι συνδεδεμένες λίστες αποτελούν μία δυναμική δομή δεδομένων που επιτρέπει την αποθήκευση στοιχείων σε μη συνεχόμενες θέσεις μνήμης. Κάθε στοιχείο (κόμβος) συνδέεται με τον επόμενο μέσω ενός δείκτη (pointer).
Συνδεδεμένη Λίστα
📊 Αναπαράσταση Συνδεδεμένης Λίστας
Η συνδεδεμένη λίστα αναπαρίσταται ως μια ακολουθία από κόμβους. Κάθε κόμβος περιέχει:
- Δεδομένα.
- Έναν δείκτη που δείχνει τον επόμενο κόμβο.
Στην Εικόνα 1.3.2 του σχολικού βιβλίου, μπορούμε να δούμε ένα παράδειγμα συνδεδεμένης λίστας με τέσσερις κόμβους που περιέχουν ακέραιους αριθμούς (45, 8, 67, 13). Ο τελευταίος κόμβος της λίστας έχει έναν δείκτη με τιμή NULL, που σηματοδοτεί το τέλος της λίστας.
🔁 Πρόσβαση στους Κόμβους της Λίστας
Για να προσπελάσουμε τα στοιχεία μιας συνδεδεμένης λίστας, πρέπει να ξεκινήσουμε από την κεφαλή (head), δηλαδή τον πρώτο κόμβο, και να ακολουθήσουμε τους δείκτες προς τον επόμενο κόμβο, μέχρι να φτάσουμε στον επιθυμητό.
Πρόσβαση σε Στοιχεία
🏍️ Παράδειγμα Χρήσης: Οδικό Ταξίδι
🔄 Διαχείριση Συνδεδεμένης Λίστας
Μπορούμε να προσθέσουμε ή να διαγράψουμε κόμβους σε μια συνδεδεμένη λίστα αλλάζοντας απλώς τους δείκτες.
- Αν αποφασίσουμε να επισκεφτούμε τον Βόλο στο ταξίδι μας (Εικόνα 1.3.5), μπορούμε να εισάγουμε έναν νέο κόμβο με τις πληροφορίες του Βόλου ανάμεσα στη Λαμία και τη Λάρισα, αλλάζοντας τους δείκτες με κατάλληλο τρόπο.
- Αν αποφασίσουμε να αφαιρέσουμε τη Λαμία από το ταξίδι, μπορούμε απλά να κάνουμε τον δείκτη της Αθήνας να δείχνει στον κόμβο του Βόλου.
Διαχείριση Κόμβων
🏃♂️ Παράδειγμα Σκυταλοδρομίας: Απλή Συνδεδεμένη Λίστα
👟 Σκυταλοδρομία με Συνδεδεμένη Λίστα
Φανταστείτε έναν αγώνα σκυταλοδρομίας. Κάθε αθλητής πρέπει να περιμένει τον προηγούμενό του πριν ξεκινήσει. Αυτός ο αγώνας μπορεί να αναπαρασταθεί ως μια απλή συνδεδεμένη λίστα, όπου κάθε αθλητής είναι ένας κόμβος και η σύνδεση μεταξύ τους γίνεται με δείκτες (pointers). Ο πρώτος αθλητής είναι η κεφαλή (head) και ο τελευταίος συνδέεται με NULL για να δηλώσει το τέλος της λίστας (Εικόνα 1.3.7).
Απλή Συνδεδεμένη Λίστα
🔁 Διπλά Συνδεδεμένες Λίστες
Οι διπλά συνδεδεμένες λίστες επιτρέπουν την κίνηση και προς τις δύο κατευθύνσεις (προς τα εμπρός και προς τα πίσω). Κάθε κόμβος έχει δύο δείκτες: έναν προς τον προηγούμενο και έναν προς τον επόμενο. Ένα παράδειγμα χρήσης διπλά συνδεδεμένης λίστας είναι οι σταθμοί του μετρό (Εικόνα 1.3.8).
Διπλά Συνδεδεμένη Λίστα
📊 Διαφορές Λίστας με Πίνακα - Πλεονεκτήματα και Μειονεκτήματα
🛠️ Διαφορές
- Οι λίστες επιτρέπουν σειριακή πρόσβαση, ενώ οι πίνακες επιτρέπουν τυχαία πρόσβαση.
- Οι πίνακες έχουν σταθερό μέγεθος, ενώ οι λίστες είναι δυναμικές.
- Οι λίστες αποθηκεύονται σε μη συνεχόμενες θέσεις μνήμης, ενώ οι πίνακες σε συνεχόμενες.
✅ Πλεονεκτήματα των Λιστών
- Δυναμικό μέγεθος.
- Εύκολη εισαγωγή και διαγραφή στοιχείων σε οποιοδήποτε σημείο.
❌ Μειονεκτήματα των Λιστών
- Δεν επιτρέπουν τυχαία πρόσβαση (πρέπει να διασχίσεις τους κόμβους από την αρχή).
- Απαιτούν περισσότερη μνήμη λόγω των δεικτών που αποθηκεύονται μαζί με τα δεδομένα.
Ο Ευκλείδης λειτουργεί μέσω τεχνητής νοημσύνης