Stack - 它是一個儲存容器,支援依後進先出 (LIFO) 順序擷取。當檢索順序根本不重要時(例如處理批次作業時),堆疊可能是正確的容器。
例如,考慮自助餐廳中使用的一疊盤子:從盤子中取出盤子的順序與添加盤子的順序相反,因為只有頂部的盤子可以訪問.
堆疊上的 INSERT 操作通常稱為 PUSH,而不帶有元素參數的 DELETE 操作通常稱為 POP。
壓入 (x,s): 將項目 x 插入堆疊 s 的頂部。
Pop(s) : 傳回(並刪除)堆疊 s 的頂部項目。
儘管有保存期限的激勵,放入冰箱的食物通常也會以同樣的方式取出。從演算法上來說,後進先出往往發生在執行遞歸演算法的過程中。
堆疊的應用 -
使用陣列實作堆疊 -
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]
佇列 - 它是一個儲存容器,支援以先進先出(FIFO)順序擷取。我們將佇列上的 INSERT 運算稱為 ENQUEUE,將 DELETE 運算稱為 DEQUEUE。與堆疊操作 POP 一樣,DEQUEUE 不帶元素參數。堆疊和佇列是動態集合,其中透過 DELETE 操作從集合中刪除的元素是預先定義的。
入隊(x,q):將項目x插入隊列q的後面。
出隊(q): 返回(並刪除)隊列 q 中最前面的項。
隊列有頭和尾。
當一個元素入隊時,它會在隊列尾部佔據一席之地,就像新到達的顧客在隊列末尾佔據一席之地一樣。
出隊的元素總是排在隊伍最前面的那個,就像排在隊伍最前面的顧客,他等待的時間最長。
隊列的應用 -
使用陣列實作佇列-
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]
使用堆疊實作佇列 -
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)
使用佇列實作堆疊 -
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
以上是堆疊和佇列 ||蟒蛇 ||資料結構和演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!