Stapel - Es handelt sich um einen Lagerbehälter, der die Entnahme nach der LIFO-Reihenfolge (Last-In, First-Out) unterstützt. Stapel sind wahrscheinlich der richtige Container, wenn die Abrufreihenfolge überhaupt keine Rolle spielt, beispielsweise bei der Verarbeitung von Batch-Jobs.
Stellen Sie sich zum Beispiel einen Tellerstapel vor, der in Kantinen verwendet wird: Die Reihenfolge, in der die Teller aus dem Stapel entnommen werden, ist umgekehrt zur Reihenfolge, in der sie hinzugefügt wurden, da nur der oberste Teller zugänglich ist .
Die INSERT-Operation auf einem Stapel wird oft als PUSH bezeichnet, und die DELETE-Operation, die kein Elementargument akzeptiert, wird oft als POP bezeichnet.
Push (x,s):Element x oben in Stapel s einfügen.
Pop(s) : Das oberste Element des Stapels zurückgeben (und entfernen) s.
In meinen Kühlschrank eingelegte Lebensmittel werden trotz der Anreize durch das Verfallsdatum normalerweise auf die gleiche Weise wieder ausgegeben. Algorithmisch gesehen geschieht LIFO tendenziell im Zuge der Ausführung rekursiver Algorithmen.
Anwendungen von Stack -
Stack mit Array implementieren -
class Stack: def __init__(self): #Initializes an empty stack self.stack = [] def isEmpty(self) -> bool: #Returns True if the stack is empty, False otherwise. return len(self.stack) == 0 def push(self, item) -> None: #Pushes an item onto the stack. self.stack.append(item) def pop(self): #Removes and returns the top item from the stack. if self.isEmpty(): return None return self.stack.pop() def peek(self): #Returns the top item from the stack without removing it. if self.isEmpty(): return None return self.stack[-1]
Warteschlange – Es handelt sich um einen Lagerbehälter, der die Entnahme nach der First-In-First-Out-Reihenfolge (FIFO) unterstützt. Wir rufen die INSERT-Operation für eine Warteschlange ENQUEUE auf und die DELETE-Operation rufen wir DEQUEUE auf. Wie die Stapeloperation POP akzeptiert DEQUEUE kein Elementargument. Stapel und Warteschlangen sind dynamische Mengen, in denen das durch die DELETE-Operation aus der Menge entfernte Element vordefiniert ist.
Enqueue(x,q):Element x am Ende der Warteschlange q einfügen.
Aus der Warteschlange entfernen(q): Das vordere Element aus der Warteschlange q zurückgeben (und entfernen).
Die Warteschlange hat einen Kopf und einen Schwanz.
Wenn ein Element in die Warteschlange gestellt wird, nimmt es seinen Platz am Ende der Warteschlange ein, genauso wie ein neu ankommender Kunde einen Platz am Ende der Warteschlange einnimmt.
Das aus der Warteschlange entfernte Element ist immer dasjenige, das an der Spitze der Warteschlange steht, wie der Kunde an der Spitze der Warteschlange, der am längsten gewartet hat.
Anwendungen der Warteschlange -
Warteschlange mit Array implementieren-
class Stack: def __init__(self): #Initializes an empty stack self.stack = [] def isEmpty(self) -> bool: #Returns True if the stack is empty, False otherwise. return len(self.stack) == 0 def push(self, item) -> None: #Pushes an item onto the stack. self.stack.append(item) def pop(self): #Removes and returns the top item from the stack. if self.isEmpty(): return None return self.stack.pop() def peek(self): #Returns the top item from the stack without removing it. if self.isEmpty(): return None return self.stack[-1]
Warteschlange mithilfe von Stacks implementieren -
class MyQueue: def __init__(self): # Store elements self.queue = [] # A pointer to indicate the start position self.p_start = 0 def enQueue(self, x): #Insert an element into the queue. self.queue.append(x) return True # Return True if the operation is successful def deQueue(self): #Delete an element from the queue. if self.isEmpty(): return False self.p_start += 1 return True #Return True if the operation is successful def Front(self): #Get the front item from the queue. if not self.isEmpty(): return self.queue[self.p_start] return None # Return None if the queue is empty def isEmpty(self): #Checks whether the queue is empty or not return self.p_start >= len(self.queue)
Stack mithilfe von Warteschlangen implementieren -
class MyQueue: def __init__(self): self.stack_1 = [] # Main stack for enqueue operations self.stack_2 = [] # Temporary stack for dequeue operations self.front = None # Pushes element x to the back of the queue. def push(self, x): # Move all elements from stack1 to stack 2 to reverse their order while self.stack_1: self.stack_2.append(self.stack_1.pop()) self.stack_2.append(x) # Move all elements back from stack2 to stack 1 as a queue while self.stack_2: self.stack_1.append(self.stack_2.pop()) # Removes the element from the front of the queue and returns it def pop(self): return self.stack_1.pop() # Returns the element at the front of the queue def peek(self): return self.stack_1[-1] # Returns true if the queue is empty, false otherwise def empty(self): return not self.stack_1
Das obige ist der detaillierte Inhalt vonStapel und Warteschlange || Python || Datenstrukturen und Algorithmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!