Guten Abend.
Danke für Ihre Unterstützung. Es scheint, dass mein Artikel für alle nützlich ist Ich bin sehr glücklich (≧ ▽ ≦)
Das Zusammenfassen des eigenen Verständnisses organisiert auch das eigene Verständnis Zwei Fliegen mit einer Klappe! (* ´ 艸 `)
Nun zum Titel, Es ist ein interessantes Thema, nicht wahr? Lass es uns sofort tun. Welche Art von Befreiung haben Sie sich vorgestellt?
Ich dachte, dass dies erreicht werden könnte, indem ein dedizierter Stack für Push bzw. Pop vorbereitet wird. Bewahren Sie es beispielsweise beim Drücken in dem Bereich auf, der dem Drücken gewidmet ist. Bei Pop werden die Daten nur von Push nach Pop übertragen. Das ist cool! ????? Lassen Sie uns vorerst Schritt für Schritt ein Bild erstellen.
** 1. Für Push ** Die Daten werden auf dem dedizierten Push-Computer gespeichert. Die Daten wurden in der Reihenfolge A => B => C => D => E => F verschoben. Es gibt kein Problem. Werfen wir einen Blick auf die Nur-Pop-Maschine. Die Adresse wird für alle Fälle von 0 bis 5 vergeben, ist aber vorerst leer.
** 2. Für Pop ** Extrahieren Sie Daten von der dedizierten Push-Maschine in Form eines Stapels. Ich werde auf die Pop-dedizierte Maschine pushen. In diesem Zustand lautet die Reihenfolge von der Pop-dedizierten Maschine aus F => E => D => C => B => A. Ist es nicht so, weil du drängen wirst? Wenn Sie danach wie ein Stapel von der Pop-dedizierten Maschine springen, Die Bewegung ist ein Stapel, aber stimmt die Ausgabe des Systems nicht mit der Warteschlange überein?
Irgendwie habe ich ein Bild, also lass es uns schreiben. Die Basis basiert auf dem vorherigen Artikel. https://qiita.com/AKpirion/items/b1bad123aebe72f35a77
stack_x2_queue.py
def __init__(self,size):
self.INstr = [] #Drücken Sie die dedizierte Maschine
self.OUTstr = [] #Pop dedizierte Maschine
self.size = size
Als nächstes spielt es überhaupt keine Rolle. Lassen Sie den Abzug vorerst beiseite Push-Daten für dedizierte Maschinen (oder Pop-dedizierte Maschinen) Ich wollte die Beschreibung verwenden, um auf die entwurzelte Pop-dedizierte Maschine (oder Push-dedizierte Maschine) zu übertragen.
stack_x2_queue.py
#Wechsel von einer Nur-Push-Maschine zu einer Nur-Pop-Maschine
def trans_IN2OUT(self):
#Entwurzelte Bewegung der vorhandenen gespeicherten Datenlänge
for _ in range(len(self.INstr)):
self.OUTstr.append(self.INstr.pop())
#Wechsel von einer Nur-Pop-Maschine zu einer Nur-Push-Maschine
def trans_OUT2IN(self):
#Entwurzelte Bewegung der vorhandenen gespeicherten Datenlänge
for _ in range(len(self.OUTstr)):
self.INstr.append(self.OUTstr.pop())
Im Moment ist es in Ordnung zu schreiben, was Sie schreiben möchten, Was soll ich tun (* ´ω `) Es bleibt keine andere Wahl, als zu Tsuji match zu passen (lacht)
Beginnen wir mit Push. Egal wie viele Daten ich auf dem Push-dedizierten Computer habe Wenn die Datenlänge des Pop-dedizierten Computers 0 ist, dachte ich, es wäre gut, wenn ich auf den Push-dedizierten Computer pushen könnte. Wenn die Datenlänge des Pop-dedizierten Computers nicht 0 ist, Verwenden Sie def trans_OUT2IN (self), um von einem Nur-Pop-Computer zu einem Nur-Push-Computer zu wechseln Bewege alles. Danach habe ich es so gemacht, dass ich mit Wiederholung pushen konnte.
stack_x2_queue.py
def push(self,value):
#Überprüfen Sie, ob der Push-dedizierte Computer voll ist
if len(self.INstr) >= self.size:
#Ausnahmebehandlung, wenn voll
raise Stack.full
#Beurteilen Sie, ob die Pop-Maschine leer ist
if len(self.OUTstr) == 0:
#Wenn es leer ist, drücken Sie auf eine dedizierte Push-Maschine!
self.INstr.append(value)
else:
#Wenn es nicht leer ist, verschieben Sie alle Daten vom Pop-dedizierten Computer auf den Push-dedizierten Computer
Stack.trans_OUT2IN(self)
#Wenn len rekursiv verwendet(self.OUTstr) ==Ersetzen Sie die Daten durch 0 und drücken Sie
Stack.push(self,value)
Fügen Sie die Funktion hinzu, die Sie mit def hinzufügen möchten. Füllen Sie die Lücken aus, indem Sie die Beschreibung in jedem Def anpassen. .. Ist es okay das zu tun? (゚ Ω ゚) Pokhan (゚ Д ゚ y) y! ?? Ich bin mir sicher, dass es einen logischen Weg gibt, damit umzugehen. Ich möchte studieren
Nun, willst du als nächstes gehen, Pop.
Es ist im Grunde das Gegenteil von Push. Wenn die auf dem dedizierten Push-Computer gespeicherte Datenlänge 0 ist, Pop von einer dedizierten Pop-Maschine. In anderen als den oben genannten Fällen alle Daten von der Push-dedizierten Maschine Wechseln Sie zur Pop-Maschine. Ich denke, es wird wie folgt aussehen.
stack_x2_queue.py
def pop(self):
#Wenn der Push-dedizierte Computer leer ist, öffnen Sie ihn vom Pop-dedizierten Computer
if len(self.INstr) == 0:
print(f"pop data is {self.OUTstr.pop()}")
else:
#Verschieben Sie alle Daten von einem dedizierten Push-Computer auf einen dedizierten Pop-Computer
Stack.trans_IN2OUT(self)
#Wenn len rekursiv verwendet(self.INstr) ==Rufen Sie die 0-Bedingung erneut auf
Stack.pop(self)
Das Ganze sieht so aus.
stack_x2_queue.py
class Stack:
class full(Exception):
pass
def __init__(self,size):
self.INstr = []
self.OUTstr = []
self.size = size
def push(self,value):
if len(self.INstr) >= self.size:
raise Stack.full
if len(self.OUTstr) == 0:
self.INstr.append(value)
else:
Stack.trans_OUT2IN(self)
Stack.push(self,value)
def pop(self):
if len(self.INstr) == 0:
print(f"pop data is {self.OUTstr.pop()}")
else:
Stack.trans_IN2OUT(self)
Stack.pop(self)
def view(self):
print(self.INstr)
print(self.OUTstr)
def trans_IN2OUT(self):
for _ in range(len(self.INstr)):
self.OUTstr.append(self.INstr.pop())
def trans_OUT2IN(self):
for _ in range(len(self.OUTstr)):
self.INstr.append(self.OUTstr.pop())
x = int(input("stack size is "))
test = Stack(x)
while True:
num = int(input("1.push 2.pop: "))
if num == 1:
x = int(input("push data is "))
try:
test.push(x)
test.view()
except:
print("Full!")
elif num == 2:
try:
test.pop()
test.view()
except:
print("Empty!")
else:
break
Das Ausführungsergebnis wird ebenfalls gebucht.
stack size is 4
1.push 2.pop: 1
push data is 1 #Drücken Sie 1
[1] #Drücken Sie die dedizierte Maschine
[] #Pop dedizierte Maschine
1.push 2.pop: 1
push data is 2 #Drücken Sie 2
[1, 2] #Drücken Sie die dedizierte Maschine
[] #Pop dedizierte Maschine
1.push 2.pop: 1
push data is 3 #Drücken Sie 3
[1, 2, 3] #Drücken Sie die dedizierte Maschine
[] #Pop dedizierte Maschine
1.push 2.pop: 1
push data is 4 #Drücken Sie 4
[1, 2, 3, 4] #Drücken Sie die dedizierte Maschine
[] #Pop dedizierte Maschine
1.push 2.pop: 2
pop data is 1 #Pop 1 von einer dedizierten Pop-Maschine
[] #Drücken Sie die dedizierte Maschine
[4, 3, 2] #Pop dedizierte Maschine
1.push 2.pop: 2
pop data is 2 #Pop 2 von einer dedizierten Pop-Maschine
[] #Drücken Sie die dedizierte Maschine
[4, 3] #Pop dedizierte Maschine
1.push 2.pop: 1
push data is 2 #Push Geben Sie die Daten an das dedizierte Gerät zurück und drücken Sie 2
[3, 4, 2] #Drücken Sie die dedizierte Maschine
[] #Pop dedizierte Maschine
1.push 2.pop: 1
push data is 1
[3, 4, 2, 1]
[]
1.push 2.pop: 2
pop data is 3
[]
[1, 2, 4]
1.push 2.pop: 2
pop data is 4
[]
[1, 2]
1.push 2.pop: 2
pop data is 2
[]
[1]
1.push 2.pop: 2
pop data is 1
[]
[]
Unterwegs hörte ich auf zu ergänzen. Nachdem Sie bei jedem Push and Pop alle Daten an jeden dedizierten Computer gesendet haben Es scheint schwierig zu sein, die Vielseitigkeit aufrechtzuerhalten, ohne zu Push- und Pop-Aktionen (= ω =) y─┛ ○ o zu wechseln.
Wenn in der von der Nur-Push-Maschine oder der Nur-Pop-Maschine definierten Bewegung ein Fehler in Voll oder Leer auftritt, wird die Ausnahmeverarbeitung gestartet, sodass keine Änderungen erforderlich sind.
Vielen Dank für Ihre harte Arbeit ^^) _ Dan ~~
Recommended Posts