DOUG LLOYD: Εντάξει, τόσο από αυτό το σημείο είστε
πιθανώς αρκετά εξοικειωμένοι με πίνακες και συνδεδεμένες λίστες
το οποίο είναι το δύο κύριες δομές δεδομένων έχουμε
μίλησε για την τήρηση σύνολα δεδομένων των παρόμοιων τύπων δεδομένων που διοργανώνονται.
>> Τώρα θα πάμε να μιλήσουμε για ένα ζευγάρι των μεταβολών
σε συστοιχίες και συνδεδεμένες λίστες.
Σε αυτό το βίντεο θα πάμε για να μιλήσουμε για στοίβες.
Συγκεκριμένα θα πάμε να μιλήσουμε περίπου μια δομή δεδομένων που ονομάζεται μια στοίβα.
Ανάκληση από προηγούμενες συζητήσεις σχετικά με τους δείκτες και τη μνήμη,
ότι η στοίβα είναι επίσης η όνομα για ένα τμήμα της μνήμης
όπου δηλώνεται στατικά memory-- μνήμης που
όνομα, μεταβλητές που αναφέρουμε, κ.ά. κουφώματα και τα λοιπά και η λειτουργία των οποίων επίσης
Υπάρχουν κλήση πλαίσια στοίβα.
Έτσι, αυτό είναι μια δομή δεδομένων στοίβας όχι ένα τμήμα της στοίβας μνήμης.
ΕΝΤΆΞΕΙ.
>> Αλλά αυτό είναι μια στοίβα;
Γι 'αυτό είναι λίγο πολύ ένα ιδιαίτερο είδος της δομής
που διατηρεί τα δεδομένα με οργανωμένο τρόπο.
Και υπάρχουν δύο πολύ κοινούς τρόπους για την εφαρμογή
στοίβες χρησιμοποιώντας δύο δομές δεδομένων ότι είμαστε ήδη εξοικειωμένοι με,
πίνακες και συνδεδεμένες λίστες.
Τι κάνει μια ειδική στοίβα είναι η τρόπος με τον οποίο μπορούμε να βάλουμε την πληροφορία
σε στοίβα, και τον τρόπο που αφαιρέσει τις πληροφορίες από τη στοίβα.
Ιδίως με στοίβες ο κανόνας είναι μόνο το πιο
προστέθηκε πρόσφατα στοιχείο μπορεί να αφαιρεθεί.
>> Έτσι σκεφτείτε το σαν να είναι μια στοίβα.
Είμαστε συσσωρεύονται πληροφορίες πάνω από μόνη της,
και μόνο το πράγμα στην κορυφή του πασσάλου μπορεί να αφαιρείται.
Εμείς δεν μπορεί να αφαιρέσει το πράγμα κάτω γιατί οτιδήποτε άλλο θα
καταρρεύσει και να πέσει πάνω.
Γι 'αυτό και πραγματικά χτίζουμε μια στοίβα που Στη συνέχεια, πρέπει να αφαιρέσετε το κομμάτι από το κομμάτι.
Εξαιτίας αυτού που συνήθως αναφέρονται σε μια στοίβα ως δομή LIFO,
τελευταία in, first out.
LIFO, τελευταία in, first out.
>> Έτσι, εξαιτίας αυτού του περιορισμού για πώς οι πληροφορίες μπορούν να προστεθούν σε
και απομακρύνεται από το σωρό, δεν υπάρχει πραγματικά μόνο δύο πράγματα που μπορούμε να κάνουμε με μια στοίβα.
Μπορούμε να ωθήσει, το οποίο είναι το όρος που χρησιμοποιούμε για την προσθήκη
ένα νέο στοιχείο στην κορυφή της στοίβα, ή εάν η στοίβα δεν υπάρχει
και είμαστε αυτό δημιουργεί από το μηδέν, δημιουργώντας τη στοίβα στην πρώτη θέση
θα πρέπει να πιέζει.
Και τότε ποπ, αυτό είναι το είδος του CS όρος που χρησιμοποιούμε για να αφαιρέσετε τον πιο πρόσφατο
πρόσθετο στοιχείο από την κορυφή της στοίβας.
>> Έτσι θα πάμε να δούμε τόσο υλοποιήσεις, τόσο με βάση σειρά
και συνδεδεμένη λίστα βασίζεται.
Και θα πάμε να ξεκινήστε με σειρά που βασίζεται.
Έτσι, εδώ είναι η βασική ιδέα του τι η δομή δεδομένων στοίβας σειρά με βάση
θα μοιάζουν.
Έχουμε έναν ορισμό δακτυλογραφημένη εδώ.
Μέσα από ότι έχουμε δύο μέλη ή τα πεδία της δομής.
Έχουμε μια σειρά.
Και πάλι είμαι με τη χρήση του αυθαίρετη τιμή τύπο δεδομένων.
>> Έτσι, αυτό θα μπορούσε να είναι οποιουδήποτε τύπου δεδομένων, int char ή κάποια άλλα δεδομένα
Τύπος δημιουργήσατε προηγουμένως.
Έτσι, έχουμε μια σειρά μεγέθους χωρητικότητας.
Χωρητικότητα είναι ένα κιλό ορίζεται σταθερά, ίσως κάπου αλλού στο αρχείο μας.
Έτσι παρατηρήσετε ήδη με το συγκεκριμένο εφαρμογή που οριοθετούν
τους εαυτούς μας ως ήταν τυπικά η περίπτωση με συστοιχίες,
το οποίο δεν μπορούμε να αλλάξετε το μέγεθος δυναμικά, όπου υπάρχει ένας ορισμένος αριθμός
των στοιχείων μέγιστο που μπορούμε να θέσουμε σε στοίβα μας.
Σε αυτή την περίπτωση είναι τα στοιχεία ικανότητας.
>> Κρατάμε επίσης παρακολουθείτε η κορυφή της στοίβας.
Τι στοιχείο είναι η πιο προστέθηκε πρόσφατα στη στοίβα;
Και έτσι μπορούμε να παρακολουθείτε ότι σε μια μεταβλητή που ονομάζεται κορυφή.
Και όλα αυτά παίρνει πλανώνται σε ένα νέο τύπο δεδομένων που ονομάζεται μια στοίβα.
Και μόλις είμαστε δημιουργούνται αυτό το νέο τύπο δεδομένων
μπορούμε να την αντιμετωπίσουμε σαν κάθε άλλο τύπο δεδομένων.
Μπορούμε να δηλώσουμε στοίβα s, όπως ακριβώς θα μπορούσαμε να κάνουμε int x, y ή char.
Και όταν λέμε στοίβα s, καλά τι συμβαίνει
Είναι έχουμε ένα σύνολο μνήμης που προορίζεται για εμάς.
>> Στην περίπτωση αυτή, ικανότητα Έχω προφανώς αποφάσισε
είναι 10, γιατί έχω ένα μόνο μεταβλητή του τύπου στοίβας
το οποίο περιέχει δύο πεδία ανακαλέσουν.
Μια σειρά, σε αυτή την περίπτωση πρόκειται να είναι μια σειρά ακεραίων
όπως συμβαίνει στην πλειονότητα των παραδειγμάτων μου.
Και μια άλλη μεταβλητή ακέραιο ικανή να αποθηκεύει την κορυφή,
πιο πρόσφατα προστέθηκε στοιχείο στη στοίβα.
Έτσι, ένα ενιαίο στοίβα από ό, τι ακριβώς ορίζεται μοιάζει με αυτό.
Είναι ένα κουτί που περιέχει μια σειρά από 10 τι
θα είναι ακέραιοι σε αυτήν την περίπτωση και άλλη μεταβλητή ακεραίου εκεί στο πράσινο
για να δείχνει την κορυφή της στοίβας.
>> Για να ρυθμίσετε το πάνω μέρος του στοίβα απλά λέμε s.top.
Αυτό είναι το πώς θα αποκτήσετε πρόσβαση σε ένα πεδίο μιας δομής ανάκληση.
s.top ισούται με 0 αποτελεσματικά κάνει αυτό σε στοίβα μας.
Έτσι και πάλι έχουμε δύο πράξεις ότι μπορούμε να εκτελέσουμε τώρα.
Μπορούμε να ωθήσει και μπορούμε να σκάσει.
Ας αρχίσουμε με το πάτημα.
Και πάλι, ωθώντας είναι η προσθήκη μιας νέας στοιχείο στην κορυφή της στοίβας.
>> Έτσι, αυτό που χρειαζόμαστε για να κάνουμε αυτή η συστοιχία εφαρμογή που βασίζεται;
Καλά σε γενικές γραμμές η λειτουργία ώθησης πρόκειται
να πρέπει να αποδεχθεί μια pointer στη στοίβα.
Τώρα πάρτε ένα δευτερόλεπτο και να το σκεφτώ.
Γιατί να θέλουμε να το δεχτούμε ένας δείκτης στη στοίβα;
Ανάκληση από την προηγούμενη βίντεο για εμβέλεια των μεταβλητών και δεικτών,
τι θα συμβεί αν απλώς αποστέλλονται στοίβα, s μάλλον ως παράμετρος;
Τι πραγματικά θα περάσει εκεί μέσα;
Θυμηθείτε ότι δημιουργείτε ένα αντίγραφο όταν θα το περάσει σε μια συνάρτηση
εκτός και αν χρησιμοποιούμε δείκτες.
Και έτσι αυτή η λειτουργία ωθήσει ανάγκες να δεχθεί ένα δείκτη σε στοίβα
έτσι ώστε να είμαστε πραγματικά αλλάζει η στοίβα σκοπεύουμε να αλλάξουμε.
>> Το άλλο πράγμα ώθηση θέλει πιθανώς να αποδέχονται είναι ένα στοιχείο δεδομένων της αξίας του τύπου.
Σε αυτή την περίπτωση, πάλι, ότι ένας ακέραιος θα πάμε για να προσθέσετε στην κορυφή της στοίβας.
Έτσι έχουμε δύο παραμέτρους μας.
Τι θα πάμε να τώρα κάνουμε μέσα ώθησης;
Λοιπόν, απλά, είμαστε ακριβώς πρόκειται να προσθέσει ότι το στοιχείο στην κορυφή της στοίβας
και στη συνέχεια να αλλάξετε όπου η κορυφή του η στοίβα είναι, ότι s dot κορυφαία αξία.
Έτσι, αυτό είναι ό, τι μια λειτουργία δήλωση για την ώθηση
μπορεί να μοιάζει σε ένα βασισμένη σε πίνακα εφαρμογής.
>> Και πάλι αυτό δεν είναι ένα σκληρό και απαράβατο κανόνα ότι θα μπορούσε να αλλάξει αυτό και να έχουν
ποικίλλουν σε διαφορετικούς τρόπους.
Ίσως s έχει κηρυχθεί σε παγκόσμιο επίπεδο.
Και έτσι δεν χρειάζεται καν για να περάσει είναι σαν μια παράμετρο.
Αυτό είναι και πάλι μόνο ένα γενική περίπτωση για την ώθηση.
Και υπάρχουν διαφορετικοί τους τρόπους εφαρμογής της.
Αλλά στην περίπτωση αυτή μας ώθηση πρόκειται να πάρει
δύο επιχειρήματα, ένας δείκτης σε μια στοίβα και ένα στοιχείο δεδομένων της αξίας του τύπου, ακέραια
σε αυτήν την περίπτωση.
>> Γι 'αυτό και κήρυξε s, εμείς είπε s.top ισούται με 0.
Τώρα ας ωθήσει το αριθμός 28 πάνω στη στοίβα.
Λοιπόν, τι σημαίνει αυτό;
Λοιπόν σήμερα κορυφή της στοίβας είναι 0.
Και ναι, ποιο είναι βασικά πρόκειται να συμβεί είναι
θα πάμε να κολλήσει τον αριθμό 28 σε θέση πίνακα 0.
Αρκετά απλό, σωστά, ότι ήταν η κορυφαία και τώρα είμαστε καλοί να πάτε.
Και τότε θα πρέπει να αλλάξουμε ό, τι η κορυφή της στοίβας θα είναι.
Έτσι ώστε την επόμενη φορά πιέζουμε ένα στοιχείο σε,
θα πάμε να το αποθηκεύσετε σε θέση πίνακα, κατά πάσα πιθανότητα δεν είναι 0.
Δεν θέλουμε να αντικαταστήσετε τι μπορούμε απλά βάλτε εκεί.
Και έτσι θα προχωρήσουμε μόνο την κορυφή προς 1.
Αυτό ίσως έχει νόημα.
>> Τώρα, αν θέλουμε να θέσουμε ένα ακόμη στοιχείο στη στοίβα, λέμε ότι θέλουμε να πιέσουμε 33,
και τώρα είμαστε ακριβώς πρόκειται να λάβει 33 και το βάζουμε σε σειρά αριθμός θέσης
1, και στη συνέχεια να αλλάξετε το επάνω μέρος μας στοίβα να είναι συστοιχία αριθμό θέσης δύο.
Έτσι, αν την επόμενη φορά που θέλουμε να ωθήσει ένα στοιχείο στη στοίβα,
αυτό θα πρέπει να τεθεί σε θέση πίνακα 2.
Και ας το κάνουμε αυτό για μια ακόμη φορά.
Θα πιέσει 19 ανοικτά από τις στοίβες.
Θα βάλει 19 σε θέση πίνακα 2 και να αλλάξετε την κορυφή της στοίβας μας
να είναι θέση πίνακα 3 Έτσι, αν η επόμενη φορά που θα
πρέπει να κάνει μια ώθηση είμαστε καλοί να πάτε.
>> Εντάξει, έτσι ώστε να είναι πιέζει με λίγα λόγια.
Τι γίνεται με το σκάσιμο;
Έτσι σκασίματος είναι το είδος του ομόλογό του να πιέζει.
Είναι το πώς θα καταργήσετε δεδομένα από τη στοίβα.
Και σε γενικές γραμμές τις ανάγκες ποπ να κάνετε τα εξής.
Πρέπει να δεχθεί ένα δείκτη προς το στοίβα, και πάλι στη γενική περίπτωση.
Σε κάποια άλλη περίπτωση ίσως έχουν δηλώσει τη στοίβα σε παγκόσμιο επίπεδο,
στην οποία περίπτωση δεν χρειάζεται να το περάσετε σε επειδή έχει ήδη πρόσβαση σε αυτό
ως καθολική μεταβλητή.
Αλλά τότε τι άλλο πρέπει να κάνουμε;
Καλά ήμασταν προσαύξηση η κορυφή της στοίβας στην ώθηση,
γι 'αυτό πρόκειται πιθανώς να θέλουν να ελαττώσει την κορυφή της στοίβας
στην ποπ, έτσι δεν είναι;
Και τότε φυσικά είμαστε επίσης πρόκειται να θέλουν
να επιστρέψει την αξία που βγάζουμε.
Αν είμαστε προσθήκη στοιχείων, θέλουμε για να πάρει στοιχεία από αργότερα,
πιθανότατα στην πραγματικότητα Θέλετε να τις αποθηκεύσετε έτσι
όχι μόνο τα διαγράφει από το στοίβα και στη συνέχεια να κάνουμε τίποτα μαζί τους.
Σε γενικές γραμμές, αν είμαστε πιέζει και να βρεθώ εδώ
θέλουμε να αποθηκεύσουμε αυτή πληροφοριών με ουσιαστικό τρόπο
και γι 'αυτό δεν κάνει νόημα να το απορρίψει μόνο.
Έτσι, η λειτουργία αυτή θα πρέπει να ίσως επιστρέψει μια τιμή για εμάς.
>> Έτσι, αυτό είναι ό, τι μια δήλωση για την ποπ μπορεί να μοιάζει σαν να υπάρχει στην επάνω αριστερή γωνία.
Αυτή η συνάρτηση επιστρέφει δεδομένων της αξίας του τύπου.
Πάλι έχουμε χρησιμοποιήσει ακέραιοι όλη.
Και δέχεται ένα δείκτη σε μια στοίβα όπως μοναδικό επιχείρημα του ή μόνη παράμετρος.
Έτσι τι είναι ποπ πρόκειται να κάνει;
Ας πούμε ότι θέλουμε τώρα ποπ ένα στοιχείο εκτός της s.
Έτσι θυμηθείτε είπα ότι στοίβες είναι η τελευταία in, first out, LIFO δομές δεδομένων.
Ποιο στοιχείο πρόκειται να να απομακρύνονται από τη στοίβα;
Μήπως να μαντέψετε 19;
Επειδή θα ήθελα να είναι σωστή.
19 ήταν το τελευταίο στοιχείο που προστίθεται στο στοίβα όταν πιέσαμε στοιχεία σχετικά,
και γι 'αυτό πρόκειται να το πρώτο στοιχείο που παίρνει αφαιρεθεί.
Είναι σαν να λέγαμε 28, και Στη συνέχεια βάζουμε 33 πάνω από αυτό,
και βάζουμε 19 πάνω από αυτό.
Το μόνο στοιχείο που μπορούμε να απογειωθεί είναι 19.
>> Τώρα στο διάγραμμα εδώ ό, τι έχω κάνει Είναι το είδος των διαγραμμένων 19 από τον πίνακα.
Αυτό δεν είναι στην πραγματικότητα τι θα πάμε να κάνουμε.
Εμείς απλά θα το είδος της προσποιούμαστε ότι δεν υπάρχει.
Είναι ακόμα εκεί αυτή τη θέση μνήμης,
αλλά είμαστε ακριβώς πρόκειται να το αγνοήσει αλλάζοντας την κορυφή της στοίβας μας
από το να είναι 3 προς 2.
Έτσι, αν ήταν να πιέσει τώρα Ένα άλλο στοιχείο στη στοίβα,
θα γράψει πάνω από 19.
>> Αλλά ας μην μπει στον κόπο διαγραφή 19 από τη στοίβα.
Εμείς απλά να προσποιούμαστε ότι δεν υπάρχει.
Για τους σκοπούς της στοίβας θα φύγει αν αλλάζουμε την κορυφή να είναι 2 αντί για 3.
Εντάξει, έτσι ώστε να ήταν λίγο πολύ αυτό.
Αυτό είναι το μόνο που χρειάζεται να κάνουμε να σκάσει ένα στοιχείο μακριά.
Ας το κάνουμε ξανά.
Έτσι έχω να επισημαίνονται με κόκκινο χρώμα εδώ για να δείχνουν φτιάχνουμε μια άλλη κλήση.
Εμείς πάμε να κάνουμε το ίδιο πράγμα.
>> Έτσι τι πρόκειται να συμβεί;
Λοιπόν, θα πάμε να αποθηκεύσετε 33 x και θα πάμε
να αλλάξει το κορυφή της στοίβας να 1.
Έτσι ώστε αν ήμασταν τώρα να ωθήσει ένα στοιχείου στη στοίβα που είμαστε
πρόκειται να κάνουμε τώρα, τι πρόκειται να συμβεί
είναι θα πάμε overwrite συστοιχία αριθμό θέσης 1.
Έτσι, το 33 που είχε απομείνει από το είδος πίσω από ότι εμείς απλώς προσποιήθηκε
δεν υπάρχει πια, απλά θα για να κοπανάω και να θέσει 40 εκεί αντ 'αυτού.
Και τότε φυσικά, αφού κάναμε μια ώθηση,
θα πάμε για να αυξήσετε το κορυφή της στοίβας από 1 να 2
έτσι ώστε αν προσθέτουμε τώρα Ένα άλλο στοιχείο αυτό θα
μπω σε σειρά αριθμό θέσης δύο.
>> Τώρα συνδεδεμένες λίστες είναι μια άλλη τρόπος για την εφαρμογή στοίβες.
Και αν τον ορισμό αυτό με οθόνη εδώ φαίνεται γνωστό σε σας,
αυτό συμβαίνει γιατί φαίνεται σχεδόν ακριβώς το ίδιο, στην πραγματικότητα,
λίγο πολύ είναι ακριβώς η ίδια ως μεμονωμένα συνδεδεμένη λίστα,
αν θυμάστε από τη συζήτησή μας μεμονωμένα συνδεδεμένες λίστες σε άλλο βίντεο.
Ο μόνος περιορισμός εδώ είναι για μας, όπως προγραμματιστές,
δεν είμαστε επιτρέπεται να εισάγετε ή να διαγράψετε τυχαία
από την μεμονωμένα συνδεδεμένη λίστα πράγμα που θα μπορούσαμε να κάνουμε στο παρελθόν.
Μπορούμε μόνο τώρα να εισάγετε και να διαγράψετε από η μπροστινή ή η κορυφή του συνδεδεμένου
κατάλογο.
Αυτό είναι πραγματικά το μόνο διαφορά όμως.
Αυτό είναι αλλιώς ένα μεμονωμένα συνδεδεμένη λίστα.
Είναι μόνο ο περιορισμός αντικαθιστώντας τον εαυτό μας
οι προγραμματιστές ότι αλλάζει το σε μια στοίβα.
>> Ο κανόνας εδώ είναι να διατηρεί πάντα μια pointer στο κεφάλι μιας συνδεδεμένης λίστας.
Αυτό είναι φυσικά ένα γενικά σημαντικός κανόνας για πρώτη φορά.
Για μεμονωμένα συνδεδεμένη λίστα ούτως ή άλλως σας μόνο που χρειάζεται είναι ένα δείκτη στο κεφάλι
ώστε να έχει αυτό αλυσίδας να είναι σε θέση να υποβάλει
σε κάθε άλλο στοιχείο στη συνδεδεμένη λίστα.
Αλλά είναι ιδιαίτερα σημαντική με μια στοίβα.
Και έτσι γενικά είστε πρόκειται να θέλουν πραγματικά
Αυτός ο δείκτης είναι μια καθολική μεταβλητή.
Είναι κατά πάσα πιθανότητα θα είναι ακόμη πιο εύκολο με αυτόν τον τρόπο.
Έτσι ποια είναι τα ανάλογα της ώθησης και ποπ;
Δεξιά.
Έτσι, πιέζει και πάλι είναι η προσθήκη ένα νέο στοιχείο στη στοίβα.
Σε μια συνδεδεμένη λίστα που σημαίνει ότι πρόκειται να έχουν
για να δημιουργήσετε ένα νέο κόμβο που είμαστε πρόκειται να προσθέσει στη συνδεδεμένη λίστα,
και, στη συνέχεια, ακολουθήστε τα προσεκτικά βήματα ότι έχουμε υπογραμμίσει στο παρελθόν
σε μεμονωμένα συνδεδεμένες λίστες για να το προσθέσετε στο η αλυσίδα χωρίς σπάσιμο της αλυσίδας
και να χάσει ή ορφανούς οποιοδήποτε στοιχεία της συνδεδεμένης λίστας.
Και αυτό είναι βασικά αυτό που μικρή σταγόνα του κειμένου εκεί συνοψίζει.
Και ας ρίξουμε μια ματιά το σαν ένα διάγραμμα.
>> Τόσο εδώ είναι συνδεδεμένη λίστα μας.
Περιέχει ταυτόχρονα τέσσερα στοιχεία.
Και πιο τέλεια εδώ μας στοίβα που περιέχει τέσσερα στοιχεία.
Και ας πούμε ότι θέλουμε τώρα να ωθήσει ένα νέο στοιχείο σε αυτή τη στοίβα.
Και θέλουμε να ωθήσει ένα νέο αντικείμενο των οποίων τα δεδομένα η τιμή είναι 12.
Λοιπόν, τι θα κάνουμε;
Λοιπόν πρώτα θα πάμε να χώρο malloc, δυναμικά
διατεθεί χώρος για ένα νέο κόμβο.
Και φυσικά αμέσως μετά κάνουμε μια κλήση για να είμαστε πάντα malloc
φροντίστε να ελέγξετε για μηδενική, γιατί αν έχουμε μηδενική πίσω
υπήρχε κάποιο είδος του προβλήματος.
Δεν θέλουμε να dereference λόγω null δείκτη ή θα υποστούν βλάβη SEG.
Αυτό δεν είναι καλό.
Έτσι έχουμε malloced του κόμβου.
Θα υποθέσουμε ότι είχαμε επιτυχία εδώ.
Εμείς πάμε να θέσει σε 12 το πεδίο δεδομένων του εν λόγω κόμβου.
Τώρα μπορώ να σας υπενθυμίσω το οποίο δείκτες μας κινείται δίπλα έτσι ώστε να μην σπάσει την αλυσίδα;
Έχουμε δύο επιλογές εδώ, αλλά η μόνη που πρόκειται να είναι ασφαλείς
είναι να θέσει νέα δίπλα στο δείκτη σημείο στην παλιά κεφαλή της λίστας
ή ό, τι θα είναι σύντομα η παλιά επικεφαλής της λίστας.
Και τώρα που όλοι μας Τα στοιχεία δεμένους,
Λίστα μπορούμε να προχωρήσουμε απλώς να επισημάνω στην ίδια θέση που κάνει νέα.
Και έχουμε τώρα ουσιαστικά έσπρωξε νέο στοιχείο πάνω στο μπροστινό μέρος της στοίβας.
>> Για να είμαστε ποπ απλά θέλετε να διαγράψετε το πρώτο στοιχείο.
Και έτσι ουσιαστικά ό, τι έχουμε να κάνουμε εδώ,
και πρέπει να βρούμε το δεύτερο στοιχείο.
Τελικά ότι θα γίνει ο νέος το κεφάλι αφού διαγράψετε το πρώτο.
Γι 'αυτό ακριβώς πρέπει να ξεκινήσουμε από η αρχή, να προχωρήσουμε προς τα εμπρός ένα.
Μόλις έχουμε μια λαβή σε ένα προς τα εμπρός για το πού βρισκόμαστε σήμερα
Δεν μπορούμε να διαγράψετε το πρώτο με ασφάλεια και στη συνέχεια μπορούμε να προχωρήσουμε μόνο το κεφάλι
να υποδείξει ποια ήταν η δεύτερη θητεία και στη συνέχεια, τώρα
είναι το πρώτο μετά από αυτό κόμβος να έχει διαγραφεί.
>> Έτσι και πάλι, ρίχνοντας μια ματιά σε αυτό ως ένα διάγραμμα που
Θέλετε να σκάσει τώρα μια στοιχείο εκτός αυτής της στοίβας.
Λοιπόν, τι θα κάνουμε;
Καλά είμαστε πρώτα πρόκειται να δημιουργήσουμε ένα νέο δείκτη που πρόκειται
ώστε να παραπέμπει στο ίδιο σημείο με το κεφάλι.
Εμείς πάμε για να το μετακινήσετε μία θέση προς τα εμπρός λέγοντας ίσων Trav
Trav επόμενο, για παράδειγμα, η οποία θα προωθήσει το δείκτη Trav ένα
θέση προς τα εμπρός.
Τώρα που έχουμε μια κρατήστε το πρώτο στοιχείο
μέσω του δείκτη που ονομάζεται λίστα, και η δεύτερο στοιχείο μέσω ενός δείκτη που ονομάζεται
Trav, μπορούμε να διαγράψετε με ασφάλεια ότι πρώτο στοιχείο από τη στοίβα
χωρίς να χάσει το υπόλοιπο της αλυσίδας, επειδή
έχουν έναν τρόπο να αναφερθώ με το δεύτερο στοιχείο
διαβιβάζει μέσω του δείκτη που ονομάζεται Trav.
>> Έτσι τώρα μπορούμε να ελευθερώσουμε αυτόν τον κόμβο.
Μπορούμε να απελευθερώσει λίστα.
Και τότε το μόνο που πρέπει να κάνουμε τώρα είναι Λίστα κινηθεί προς το σημείο στην ίδια θέση
Trav ότι κάνει, και είμαστε είδος πίσω όπου ξεκινήσαμε πριν πιέσαμε 12
σχετικά με στην πρώτη θέση, δεξιά.
Αυτό είναι ακριβώς εκεί που ήμασταν.
Είχαμε αυτή την στοίβα τεσσάρων στοιχείων.
Προσθέσαμε ένα πέμπτο.
Προωθήσαμε το ένα πέμπτο στοιχείο και, στη συνέχεια εμείς
έσκασε το ότι πρόσφατα προστίθεται το στοιχείο πίσω μακριά.
>> Αυτό είναι πραγματικά λίγο πολύ όλα είναι εκεί για να στοίβες.
Μπορείτε να τα εφαρμόσουν ως πίνακες.
Μπορείτε να τα εφαρμόσουν ως συνδεδεμένες λίστες.
Υπάρχουν, φυσικά, άλλες τρόπους για την εφαρμογή τους, καθώς και.
Βασικά ο λόγος που θα χρησιμοποιήσετε στοίβες είναι να διατηρήσει τα δεδομένα με τέτοιο τρόπο
ότι τα πιο πρόσφατα προστέθηκε στοιχείο είναι το πρώτο πράγμα είμαστε
πρόκειται να θέλουν να πάρουν πίσω.
Είμαι ο Νταγκ Lloyd, αυτό είναι CS50.