1. Η συνδεδεμένηλίστα αποτελείται από μία σειρά από κόμβους, που συνήθως
βρίσκονται σε απομακρυσμένες θέσεις μνήμης.
2. Κάθε κόμβος αποτελείται από δύο κύρια τμήματα. Το πρώτο τμήμα περιέχει τα δεδομένα
και το δεύτερο τμήμα φιλοξενεί τη διεύθυνση του επόμενου κόμβου με τον οποίο
συνδέεται ή όπως αλλιώς θα λέγαμε στη γλώσσα των δομών δεδομένων, το δεύτερο
τμήμα περιέχει έναν δείκτη (pointer) που δείχνει στον επόμενο κόμβο.
3. Το πεδίο Δεδομένα μπορεί να περιέχει μία ή περισσότερες αλφαριθμητικές ή αριθμητικές
πληροφορίες.
4. Ο δείκτης (pointer) είναι ένας ιδιαίτερος τύπος δεδομένων που προσφέρεται από τις
περισσότερες σύγχρονες γλώσσες προγραμματισμού. Ο δείκτης δε λαμβάνει
αριθμητικές τιμές όπως ακέραιες , πραγματικές κ.ά., αλλά οι τιμές του είναι διευθύνσεις
στην κύρια μνήμη και χρησιμοποιείται ακριβώς για τη σύνδεση των διαφόρων στοιχείων
μιας δομής, που είναι αποθηκευμένα σε μη συνεχόμενες θέσεις μνήμης.
Σελ 38
5.
Οι κόμβοιμιας λίστας δεν έχουν ονόματα
Γνωρίζουμε μόνο τις διευθύνσεις τους, που είναι αποθηκευμένες στους
προηγούμενους κόμβους και αυτές θα αξιοποιήσουμε για να τους προσπελάσουμε.
Για να επεξεργαστούμε τα δεδομένα που περιέχει, θα πρέπει να ξεκινήσουμε από τον
πρώτο κόμβο της λίστας, η διεύθυνση του οποίου περιέχεται στον δείκτη Κεφαλή.
Αυτός είναι ο μόνος τρόπος για να διασχίσουμε μία συνδεδεμένη λίστα. Σελ 39
Οι απαιτούμενες ενέργειεςγια την εισαγωγή (παρεμβολή) του νέου κόμβου:
1. Είναι ο δείκτης του δεύτερου κόμβου να δείχνει τον νέο κόμβο και
2. ο δείκτης του νέου κόμβου να δείχνει τον τέταρτο κόμβο (δηλαδή, να πάρει
την τιμή που είχε πριν την εισαγωγή ο δείκτης του τρίτου κόμβου).
Με αυτόν τον τρόπο, οι κόμβοι της λίστας διατηρούν τη λογική τους σειρά, αλλά οι
φυσικές θέσεις στη μνήμη μπορεί να είναι τελείως διαφορετικές.
Εισαγωγή (παρεμβολή)
11.
Διαγραφή κόμβου
1. Αν,επιπλέον, αποφασίσουμε να μην επισκεφθούμε τη Λαμία, θα πρέπει να
διαγράψουμε τον παραπάνω κόμβο από τη λίστα κάνοντας μια εκ νέου
διευθέτηση των αντίστοιχων δεικτών (Εικόνα 1.3.6).
2. Έτσι, για τη διαγραφή ενός κόμβου αρκεί ν’ αλλάξει τιμή ο δείκτης του
προηγούμενου κόμβου και να δείχνει πλέον στον επόμενο αυτού που
διαγράφεται, όπως φαίνεται στην Εικόνα 1.3.6. Ο κόμβος που διαγράφηκε (ο
δεύτερος) αποτελεί «άχρηστο δεδομένο» και ο χώρος μνήμης που
καταλάμβανε, παραχωρείται για άλλη χρήση.
13.
Κάθε κόμβος τηςδιπλά συνδεδεμένης λίστας, συνδέεται με τον
αμέσως επόμενο και τον αμέσως προηγούμενο κόμβο της λίστας.
Εκτός, βέβαια, από τον αρχικό και τον τελευταίο κόμβο της λίστας.
Σε μια διπλά συνδεδεμένη λίστα διευκολύνεται η ταξινόμηση και η
αναζήτηση, ωστόσο, αυξάνεται η πολυπλοκότητα στη διαχείριση των
κόμβων, καθώς απαιτείται επιπλέον χώρος για τον δεύτερο δείκτη
(επιπρόσθετη μνήμη για κάθε κόμβο).
Σελ
41
14.
Διαφορές ανάμεσα σεπίνακες και
λίστες
1. O πίνακας θεωρείται μια δομή τυχαίας προσπέλασης, σε αντίθεση με μια
λίστα που είναι στην ουσία μια δομή ακολουθιακής ή σειριακής
προσπέλασης. Για να φθάσουμε, δηλαδή, σ’ έναν κόμβο μιας λίστας πρέπει
να περάσουμε από όλους τους προηγούμενους ξεκινώντας από τον πρώτο.
2. • O πίνακας έχει σταθερό μέγεθος, το οποίο δηλώνεται εξαρχής κατά την
υλοποίηση. Αυτό γίνεται, διότι ο πίνακας είναι στατική δομή δεδομένων σε
αντίθεση με τη λίστα που είναι δυναμική δομή και το μέγεθός της μπορεί να
μεταβάλλεται καθώς εισέρχονται νέοι κόμβοι στη λίστα ή διαγράφονται
κάποιοι άλλοι.
3. Oι κόμβοι της λίστας αποθηκεύονται σε μη συνεχόμενες θέσεις μνήμης σε
αντιδιαστολή με τους πίνακες, όπου τα στοιχεία αποθηκεύονται σε
συνεχόμενες θέσεις μνήμης
15.
Στα πλεονεκτήματα τωνλιστών (έναντι των πινάκων) συγκαταλέγονται τα εξής:
• Το δυναμικό τους μέγεθος,
• η ευκολία εισαγωγής και διαγραφής από οποιοδήποτε μέρος της λίστας,
καθώς και
• η μη αναγκαιότητα δήλωσης του μεγέθους τους.
Στα μειονεκτήματα των λιστών (έναντι των πινάκων) περιλαμβάνονται τα εξής:
• Η τυχαία πρόσβαση στη λίστα δεν επιτρέπεται. Είναι αδύνατο να φτάσετε στον n-
οστό κόμβο μιας απλά συνδεδεμένης λίστας χωρίς πρώτα να περάσετε από όλους
τους κόμβους διαδοχικά μέχρι τον συγκεκριμένο κόμβο ξεκινώντας από τον πρώτο
κόμβο. Εναλλακτικά, στην περίπτωση της διπλά συνδεμένης λίστας μπορείτε να
ξεκινήσετε και από τον τελευταίο κόμβο.
Επομένως, δεν μπορούμε να πραγματοποιήσουμε με αποτελεσματικό τρόπο
δυαδική αναζήτηση σε συνδεδεμένες λίστες.
• Οι συνδεδεμένες λίστες έχουν πολύ μεγαλύτερη επιβάρυνση από τους πίνακες,
αφού οι συνδεδεμένοι κόμβοι της λίστας είναι δυναμικά κατανεμημένοι (οι οποίοι
είναι λιγότερο αποτελεσματικοί στη χρήση της μνήμης) και κάθε κόμβος στη λίστα
πρέπει, επιπλέον, να αποθηκεύσει έναν πρόσθετο δείκτη που θα δείχνει στον
επόμενο κόμβο. Στην περίπτωση των διπλά συνδεδεμένων λιστών χρειαζόμαστε
επιπλέον έναν δεύτερο δείκτη που θα δείχνει στον προηγούμενο κόμβο.
16.
Βασικές πράξεις των
συνδεδεμένωνλιστών:
1. Εισαγωγή κόμβου στη λίστα (εισαγωγή κόμβου στην αρχή, στο τέλος της
λίστας ή ενδιάμεσα).
2. Διαγραφή κόμβου από τη λίστα (διαγραφή από την αρχή, το τέλος της
λίστας ή ενδιάμεσα).
3. Έλεγχος για το αν η λίστα είναι κενή.
4. Αναζήτηση κόμβου για την εύρεση συγκεκριμένου στοιχείου.
5. Διάσχιση της λίστας και προσπέλαση των στοιχείων της (π.χ. εκτύπωση των
δεδομένων που περιέχονται σε όλους τους κόμβους της λίστας).
17.
Ασκήσεις:
1. Να σχεδιαστείη λίστα με στοιχεία:
Γιώργος 3, Πέτρος 2, Νίνα 5, Αντωνία 0, Ράνια 4, Νίκος 6
2. Να σχεδιάσετε τη λίστα που προκύπτει από τα παρακάτω στοιχεία:
Info : 20, 10, 35, 22, 12, 18, 23, 19
Next: 8, 6, 5, 2, 0, 7, 3, 4
3. Σε μία λίστα έχουν τοποθετηθεί διαδοχικά τα στοιχεία: Χ, Ψ,Α,Κ,Λ από τον πρώτο μέχρι τον πέμπτο
κόμβο.
α. Να σχεδιάσετε τη λίστα μετά την τοποθέτηση των στοιχείων.
β. Το στοιχείο Ν εισάγεται μετά το στοιχείο Α. Να σχεδιάσετε τη λίστα μετά την εισαγωγή του νέου στοιχείου.
γ. Να σχεδιάσετε τη λίστα μετά τη διαγραφή του στοιχείου Κ.
18.
5. Δίνεται μιαλίστα η οποία αποτελείται από 5 κόμβους. Το πρώτο πεδίο του κάθε κόμβου είναι ένα γράμμα
και το δεύτερο πεδίο είναι η δ/νση του επόμενου κόμβου, όπως φαίνεται στο παρακάτω διάγραμμα,
που σχηματίζει τη λέξη ΔΕΚΤΗ.
Η λίστα αυτή απεικονίζεται στη μνήμη με τη μορφή που φαίνεται στο παρακάτω σχήμα.
Στον τελευταίο κόμβο, το δεύτερο πεδίο έχει τιμή 0, η οποία σηματοδοτεί το τέλος της λίστας.
α. Να σχεδιάσετε στο τετραδιό σας την απεικόνιση της μνήμης μετά από τη διαγραφή του κατάλληλου κόμβου
από την αρχική λίστα, ώστε να σχηματιστεί η λέξη ΔΕΤΗ.
β. Να σχεδιάσετε στο τετραδιό σας την απεικόνιση της μνήμης μετά από την εισαγωγή, στην αρχική λίστα, του
κόμβου με πρώτο πεδίο το γράμμα Α στη θέση 21, ώστε να σχηματιστεί η λέξη ΔΕΚΑΤΗ.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Ε 25 Δ 16 Κ 30 Η 0 Τ 28
19.
Ερωτήσεις Σ-Λ
1. Σεμία λίστα πρέπει να οριστεί αρχικό μέγεθος.
2. Το πεδίο Δείκτης ενός κόμβου μιας λίστας, εκτός από διευθύνσεις
μπορεί να περιέχει αλφαριθμητικές τιμές.
3. Για να προσπελάσουμε τους κόμβους μιας λίστας αξιοποιούμς τα
ονόματα των κόμβων.
4. Η διαγραφή ενός κόμβου έχει ως αποτέλεσμα της αλλαγής της τιμής
του δείκτη του προηγούμενου κόμβου από αυτόν που διαγράφεται.
5. Ο πίνακας και η λίστα έχουν τον ίδιο τρόπο προσπέλασης των
στοιχείων τους.
20.
Να γράψετε τουςαριθμούς της στήλης Α και δίπλα τα γράμματα της
στήλης Β που αντιστοιχούν σωστά.
Στήλη Α Στήλη Β
α. Ένας δείκτης
1. Απλά συνδεδεμένη λίστα β. Κίνηση προς μια κατεύθυνση
2. Διπλά συνδεδεμένη λίστα γ. Πρόσβαση από τον πρώτο ή από
τον τελευταίο κόμβο.
δ. Δύο δείκτες.
ε. Πρόσβαση μόνο από τον πρώτο
κόμβο.
ζ. Κίνηση προς δυο κατευθύνσεις.
21.
Να γράψετε τουςαριθμούς της στήλης Α και δίπλα σε κάθε αριθμό ένα από
τα γράμματα της στήλης Β ώστε να προκύπτει η σωστή αντιστοίχιση.
Στήλη Α Στήλη Β
1. Ουρά α. Δυναμική Δομή Δεδομένων
2. Λίστα β. Τυχαία προσπέλαση
3. Στοίβα γ. Ώθηση - Απώθηση
4. Πίνακας δ. Εισαγωγή - Εξαγωγή
22.
Να γράψετε τουςαριθμούς 1 έως 8 της στήλης Α και δίπλα ένα από τα
γράμματα α ή β, της στήλης Β που αντιστοιχεί σωστά.
Στήλη Α Στήλη Β
1. Τυχαία προσπέλαση
2. Δυναμικό μέγεθος α. Δομή Δεδομένων ¨Λίστα¨
3. Συνεχόμενες θέσεις μνήμης β. Δομή Δεδομένων "Πίνακας"
4. Εξαρχής δήλωση μεγέθους
5. Μη συνεχόμενες θέσεις μνήμης
6. Σειριακή προσπέλαση
7. Μη αναγκαιότητα δήλωσης
μεγέθους
8. Σταθερό μέγεθος
23.
Έστω η διπλανήλίστα, που περιέχει μόνο έναν κόμβο (με τον αριθμό 1).
Α. Η λίστα υποβάλλεται σε επεξεργασία ως στοίβα.
1. Ποια θα είναι η μορφή της λίστας μετά την ώθηση των αριθμών 8,12, 3 και 0;
2. Ποια θα είναι η μορφή της λίστας-στοίβας μετά από 2 απωθήσεις; Ποιες ενέργειες θα πραγματοποιηθούν;
3. Μπορεί να συμβεί υπερχείλιση σε μια λίστα στοίβα;
4. Πως θα ελεγχθεί η υποχείλιση;
Β. Η λίστα υποβάλλεται σε επεξεργασία ως ουρά
1. Ποια θα είναι η μορφή της λίστας-ουράς μετά την εισαγωγή των αριθμών 8, 12, 3 και 0;
2. Ποια θα είναι η μορφή της λίστας-ουράς μετά από 2 εξαγωγές; Ποιες ενέργειες θα πραγματοποιηθούν;
3. Μπορεί να γεμίσει μια λίστα-ουρά;
4. Πως θα ελεγχθεί η άδεια ουρά;
ΚΕΦΑΛΗ 1
•