Was ist überhaupt ein Stapel? Ja, Daten speichern und abrufen. Das ist alles. Ich möchte jedoch zuerst die zuletzt gespeicherten Daten abrufen können. Σ(oдΟ;)
Zum Beispiel, wie unten gezeigt, während 6 Daten vertikal gestapelt werden Angenommen, Sie haben eine Box, die Sie aufbewahren können.
Leeren Sie zuerst die Schachtel, speichern Sie A und entfernen Sie sie dann. Nach dem Speichern und Abrufen von A kehrte es in seinen ursprünglichen leeren Zustand zurück. Es ist einfach.
Nachdem Sie den Datenspeicher als Push und den Abruf als Pop bezeichnet haben, Ich habe versucht, die Bewegung von Push / Pop der Daten etwas genauer herauszufinden. Ich drückte A und B und tauchte schließlich auf. Das Letzte, was noch in der Schachtel ist, ist A, nicht wahr? Auf diese Weise können Sie sich jetzt das Verhalten des Stapels vorstellen, der die letzten Push-Daten zuerst abgibt.
Ich wünschte, ich müsste keine Boxtiefe von 6 haben !? Die Details sind mir egal (lacht). Jetzt schreiben wir in Python.
Vorher, wenn Sie die Beschreibung hier nicht verstehen, Wir empfehlen, bei Progate zu studieren !! https://prog-8.com/
Bereiten wir zunächst eine Box vor, um den Stapel zu realisieren. Das Bild sieht so aus. Ich habe eine Box mit dem Namen str vorbereitet und die Kapazität so festgelegt, wie viele Daten gespeichert werden können. ptr repräsentiert die Position von 1 bis 6. Ich habe die Bewegung von ptr zur vorherigen Abbildung hinzugefügt. Auf diese Weise zeigt ptr (Zeiger) die Position der Box an, die gedrückt werden kann. Jetzt, wo Sie sich ptr vorstellen können, ist es endlich Python. Ich habe eine Schachtel gemacht.
stack.py
def __init__(self,capacity:int = 10):
self.str = [None] * capacity
self.capa = capacity
self.ptr = 0
"def __ init __" Bestimmen Sie den Anfangswert im vorbereiteten Programm! Es ist ein Klischee. Die Geschichte beginnt erst, wenn Sie sie zuerst laden, wenn das Programm ausgeführt wird. Als nächstes kommt Push.
stack.py
def push(self,value):
if self.ptr >= self.capa:
raise top.full
self.str[self.ptr] = value
print(self.str[self.ptr])
self.ptr += 1
Dazwischen liegt ein Ausdruck, den Sie jedoch ignorieren können. Wichtig ist zunächst, dass die ptr-Position nicht voll ist. Voll, wenn ptr == Kapazität Wenn ptr> Kapazität, ist das Programm außer Kontrolle !! Sie können sehen, dass wir prüfen, ob self.ptr> = self.capa :. Wenn es nicht voll ist, setzen Sie self.str [self.ptr] = value und Push wird erfolgreich abgeschlossen. Erhöhen Sie ptr um eins, um sich auf den nächsten Push vorzubereiten. Das ist alles was wir mit Push machen.
Als nächstes kommt Pop.
stack.py
def pop(self):
if self.ptr <= 0:
raise top.empty
self.ptr -= 1
return self.str[self.ptr]
Wenn der Zeiger ptr negativ war, Weil Sie den Boden durchbohren und die Daten in den Boden schrauben Überprüfen Sie dies vorerst mit der if-Anweisung. Ich bin sicher, einige von Ihnen haben sich hier gefragt. Nebenbei bemerkt, in der Python-Welt beginnt der Speicher nicht bei 1. Es beginnt bei 0. Es tut mir leid, dass die erste Zahl nicht gut war. Wenn also ptr = 0 ist, bedeutet dies leer. Es ist leer. Wenn es nicht leer ist, dekrementieren Sie ptr wie unten gezeigt um 1. Geben Sie die abzurufenden Daten an. Danach können Sie die gespeicherten Daten abrufen, indem Sie self.str [self.ptr] zurückgeben.
Nein, ich konnte die Daten mit return zurückgeben. Der angegebene Bereich ist nicht leer! ?? Ja! Das stimmt !! Bakon! (----) / ☆ (* _ *)
Tatsächlich verwaltet der Stapel die Daten an der Position von ptr. Selbst wenn Sie es nicht geleert haben, wird es beim nächsten Push automatisch neu geschrieben, oder? Wenn Sie sich also nur die Bewegung von ptr ansehen, können Sie einen Stapel erstellen. Deshalb werde ich das ganze Bild des Stapels in Eile vorbereiten.
stack.py
class top:
class full(Exception):
pass
class empty(Exception):
pass
def __init__(self,capacity:int = 10):
self.str = [None] * capacity
self.capa = capacity
self.ptr = 0
def push(self,value):
if self.ptr >= self.capa:
raise top.full
self.str[self.ptr] = value
print(self.str[self.ptr])
self.ptr += 1
def pop(self):
if self.ptr <= 0:
raise top.empty
self.ptr -= 1
return self.str[self.ptr]
test = top()
while True:
num = int(input("select 1.push , 2.pop : "))
if num == 1 :
s = int(input("enter data: "))
try:
test.push(s)
except test.full:
print("full!")
elif num == 2:
try:
x = test.pop()
print(x)
except test.empty:
print("empty!")
else:
break
Vielleicht ist "__ init __", push, pop der Schlüssel. Wenn Sie das wissen, Ich hoffe, Sie verstehen.
Dies ist mein erster Beitrag. Wenn also etwas fehlt oder schwer zu verstehen ist Bitte weisen Sie darauf hin !! m (_ _) m
Recommended Posts