在Python中使用列表作為棧和佇列


在本文中,我們將學習Python 3.x(或更早版本)中的棧和佇列結構。我們將討論這些資料結構的工作原理和修改。

這包括:

  1. 插入操作(入棧,入隊)
  2. 刪除操作(出棧,出隊)
  3. 顯示/遍歷操作

先決條件:列表和列表操作

相關資料結構:列表操作

相關圖片

在棧中,物件一個接一個地儲存,這些物件以與到達順序相反的順序移除,即遵循後進先出(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(或更早版本)中實現棧和佇列資料結構。您可以使用相同的演算法在任何其他程式語言中實現棧/佇列檢測器程式。

更新於: 2019年7月30日

5K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告