在Python中使用列表作為棧和佇列
在本文中,我們將學習Python 3.x(或更早版本)中的棧和佇列結構。我們將討論這些資料結構的工作原理和修改。
這包括:
- 插入操作(入棧,入隊)
- 刪除操作(出棧,出隊)
- 顯示/遍歷操作
先決條件:列表和列表操作
相關資料結構:列表操作
相關圖片
棧
在棧中,物件一個接一個地儲存,這些物件以與到達順序相反的順序移除,即遵循後進先出(LIFO)的概念。LIFO 表示棧資料結構中遵循後進先出的排列方式。
棧的操作:
- 新增/追加元素:這會將棧的大小增加新增的元素數量,添加發生在上端,即棧的頂部。
- 刪除/移除元素:這涉及兩個條件:如果棧為空,則沒有元素可供刪除,即棧中發生下溢;或者如果棧中存在某些元素,則頂部存在的元素將被移除。這會將棧的大小減少移除的元素數量。
- 遍歷/顯示:這涉及訪問棧的每個元素並在螢幕上顯示。
我們還可以插入一個額外的 peek 功能,即檢索棧頂部的值。
棧的特徵
- 插入順序得以保留。
- 棧允許重複元素。
- 儲存類似的資料型別。
- 在解析操作中非常有用。
示例程式碼
def isEmpty(stk): # checks whether the stack is empty or not if stk==[]: return True else: return False def Push(stk,item): # Allow additions to the stack stk.append(item) top=len(stk)-1 def Pop(stk): if isEmpty(stk): # verifies whether the stack is empty or not print("Underflow") else: # Allow deletions from the stack item=stk.pop() if len(stk)==0: top=None else: top=len(stk) print("Popped item is "+str(item)) def Display(stk): if isEmpty(stk): print("Stack is empty") else: top=len(stk)-1 print("Elements in the stack are: ") for i in range(top,-1,-1): print (str(stk[i])) # executable code if __name__ == "__main__": stk=[] top=None Push(stk,1) Push(stk,2) Push(stk,3) Push(stk,4) Pop(stk) Display(stk)
以上程式碼實現了 Python 3.x(或更早版本)中的棧功能。我們可以透過使用多個 if-else 語句為使用者提供選擇來建立一個選單驅動的程式。在這兩種情況下,棧的構建概念保持不變。
下面顯示的螢幕描繪了上述程式產生的輸出。我們還可以使用 input() 函式來實現基於使用者的輸入系統(這裡我實現了靜態輸入)。
輸出
Popped item is 4 Elements in the stack are: 3 2 1
佇列
在棧中,物件一個接一個地儲存,這些物件以與到達順序相同的順序移除,即遵循先進先出(FIFO)的概念。FIFO 表示佇列資料結構中遵循先進先出的排列方式。
佇列的操作
新增/追加元素:這會將佇列的大小增加新增的元素數量,添加發生在後端,即佇列的末尾。
刪除/移除元素:這涉及兩個條件:如果佇列為空,則沒有元素可供刪除,即佇列中發生下溢;或者如果佇列中存在某些元素,則最前面的元素將被移除。這會將棧的大小減少移除的元素數量。
遍歷/顯示:這涉及訪問棧的每個元素並在螢幕上顯示。
我們還可以插入一個額外的 peek 功能,即檢索佇列末尾/後端的值。
佇列的特徵
- 插入順序得以保留。
- 佇列允許重複元素。
- 儲存類似的資料型別。
- 在解析 CPU 任務操作中非常有用。
示例程式碼
#Adding elements to queue at the rear end def enqueue(data): queue.insert(0,data) #Removing the front element from the queue def dequeue(): if len(queue)>0: return queue.pop() return ("Queue Empty!") #To display the elements of the queue def display(): print("Elements on queue are:"); for i in range(len(queue)): print(queue[i]) # executable code if __name__=="__main__": queue=[] enqueue(5) enqueue(6) enqueue(9) enqueue(5) enqueue(3) print("Popped Element is: "+str(dequeue())) display()
以上程式碼實現了 Python 3.x(或更早版本)中的佇列功能。我們可以透過使用多個 if-else 語句為使用者提供選擇來建立一個選單驅動的程式。在這兩種情況下,佇列的構建概念保持不變。
下面顯示的螢幕描繪了上述程式產生的輸出。我們還可以使用 input() 函式來實現基於使用者的輸入系統(這裡我實現了靜態輸入)。
輸出
Popped item is: 5 Elements on queue are: 3 5 9 6
結論
在本文中,我們學習瞭如何在 Python 3.x(或更早版本)中實現棧和佇列資料結構。您可以使用相同的演算法在任何其他程式語言中實現棧/佇列檢測器程式。