Δημιουργήστε τη δομή του κόμβου που θα χρησιμεύσει ως τον τύπο δεδομένων της συνδεδεμένης λίστας . Στον επεξεργαστή κειμένου , πληκτρολογήστε τον παρακάτω κώδικα :
# include int main { struct { listNode int δεδομένων ? γόνατο listNode * προηγ ? αλαζονικό listNode * επόμενο ? } ? επιστροφή 0? } Η " struct listNode " μπλοκ του κώδικα δημιουργεί ένα πρότυπο για τα στοιχεία που θα συμπληρώσετε τη λίστα . Αυτό το πρότυπο καθορίζει ένα listNode καθώς περιέχει τρία στοιχεία : ένα στοιχείο δεδομένων ( ακέραιος αριθμός ) και δείκτες για τα προηγούμενα και τα επόμενα στοιχεία στη λίστα . Ένας δείκτης είναι μια μεταβλητή που κρατά μια διεύθυνση μνήμης . Δείκτες που χρησιμοποιείται για να αναφερθεί σε άλλες δομές δεδομένων σε βαθιά μνήμη και να κατανέμει δυναμικά μνήμη κατά την εκτέλεση του κώδικα . 2 να αναγνωρίσει τις μεταβλητές που θα οργανώσει τη δομή καταλόγου . Τοποθετήστε αυτό το παράδειγμα κώδικα στο αρχείο κειμένου : int μέγεθος ? ListNode * κεφάλι? ListNode * ουρά? Ουρά = κεφάλι? = ουρά? Αυτές οι δύο δείκτες είναι η αρχή και το τέλος της λίστας , αντίστοιχα . Χρησιμοποιώντας αυτούς τους δείκτες , ο προγραμματιστής ξέρει όπου η αρχή του καταλόγου είναι και όπου το τέλος είναι , απλά ελέγχοντας εάν ο τρέχων κόμβος είναι η "κεφαλή " ή " ουρά " δείκτη. Και οι δύο αναφέρονται πίσω ο ένας στον άλλο σε περίπτωση μια κενή λίστα . Δημιουργήστε ένα απλό αλγόριθμο για να προσαρτήσει τα στοιχεία από τη συνδεδεμένη λίστα . Ακολουθήστε αυτό το παράδειγμα κώδικα : void append ( int num ) { struct listNode * ιχνηθέτη = κεφάλι? Struct listNode * newNode = ( struct listNode * ) malloc ( sizeof ( struct listNode ) ) ? newNode - > data = num ? αν ( κεφάλι == NULL) { κεφάλι = newNode ? ουρά = newNode ? newNode - > προηγ = κεφάλι ? newNode - > επόμενο = ουρά? } else { ενώ ( ιχνηθέτη - > επόμενο = ουρά ! ) { ιχνηθέτη = ιχνηθέτη - > επόμενο ? } newNode - > προηγ = ιχνηθέτη ? newNode - > επόμενο = ουρά? ιχνηθέτη - > επόμενο κόμβο = ? ουρά = κόμβου ? } μέγεθος + + ? } Ο κωδικός αυτός προσθέτει έναν κόμβο στο τέλος της λίστας . Ξεκινά με τη δημιουργία ενός δείκτη στο κεφάλι του καταλόγου ( «ανιχνευτή» ) . Στη συνέχεια , δημιουργεί ένα δείκτη σε μια κατανέμεται δυναμικά μπλοκ μνήμης που προορίζεται για μια νεοσύστατη listNode ( newNode ) και θέτει τα δεδομένα του κόμβου στο ακέραιο " αριθμός " . Εάν η κεφαλή δείχνει NULL ( που σημαίνει ότι η λίστα είναι κενή , επειδή τα σημεία της κεφαλής σε τίποτα ) , τότε , ο κώδικας εισάγει τον κόμβο στην αρχή της λίστας. Σε αντίθετη περίπτωση , η "ενώ" κύκλοι βρόχο μέσω των κόμβων στη λίστα μέχρι να φτάσει το τελευταίο κόμβο . Όταν «ανιχνευτή» σημεία στο τελευταίο στοιχείο της λίστας , ο κώδικας εισάγει τον κόμβο . Η τελική εντολή προσθέτει το "μέγεθος " ακέραιος , την παρακολούθηση των στοιχείων στη λίστα Δημιουργήστε έναν αλγόριθμο για να αφαιρέσετε και το σημείο από το τέλος της λίστας : . void removeNode ( ) { αν ( ουρά = κεφάλι ! ) { struct listNode * τέλος = ουρά? ελεύθερο (τέλος ) ? μέγεθος - ? } } Αυτός ο κώδικας δημιουργεί ένα δείκτη ( «τέλος» ) έως την τελευταία στοιχείο της λίστας ( το ίδιο στοιχείο «ουράς» σημεία για να ) . Στη συνέχεια , η ουρά έχει ρυθμιστεί ώστε να δείχνει προς το στοιχείο αμέσως πριν από το τελευταίο στοιχείο ( ο κόμβος που υποδεικνύεται από το " προηγούμενο " δείκτη του τελευταίου στοιχείου ) . Τέλος , η μνήμη που χρησιμοποιείται από το τελευταίο κόμβο , που αναφέρεται από το " τέλος " , ελευθερώνεται για περαιτέρω χρήση .
το κεφάλι
Εικόνων 3
Η 4
ουρά = tail- > προηγ ?
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα