Python 實現一個可以在隊首、隊中和隊尾進行 push 和 pop 操作的佇列程式


假設,我們被要求實現一個可以在隊首、隊中和隊尾進行 push 和 pop 操作的佇列。

我們需要為這三種情況分別實現一對 push 和 pop 函式。還需要實現另一個函式,用於在給定時間顯示完整的佇列。

所以,如果輸入如下:

push_from_back(10)

push_from_back(20)

push_from_front(30)

push_from_middle(40)

push_from_front(50)

show_queue()

pop_from_back()

show_queue()

pop_from_front()

show_queue()

pop_from_middle()

show_queue(),

那麼輸出將是 [50, 30, 40, 10, 20]

[50, 30, 40, 10]

[30, 40, 10]

[30, 10]

為了解決這個問題,我們將遵循以下步驟:

  • array := 佇列的陣列表示

  • 定義一個函式 push_from_front() 。它將接收一個值

    • 將值插入到陣列的第 0 個位置

  • 定義一個函式 push_from_middle() 。它將接收一個值

    • 將值插入到陣列的 (陣列大小) / 2 位置

  • 定義一個函式 push_from_back() 。它將接收一個值

    • 將值插入到陣列的末尾

  • 定義一個函式 pop_from_front() 。

    • 如果陣列不為空,則刪除並返回陣列的第一個元素

  • 定義一個函式 pop_from_middle() 。

    • 刪除並返回陣列 (陣列長度 - 1) / 2 位置的元素

  • 定義一個函式 pop_from_back() 。

    • 刪除並返回陣列的最後一個元素

  • 定義一個函式 show_queue() 。它不接收任何輸入

    • 返回陣列

示例

讓我們看看下面的實現,以獲得更好的理解

class Solution():

   def __init__(self):
      self.array = []

   def push_from_front(self, value):
      self.array.insert(0, value)

   def push_from_middle(self, value):
      self.array.insert(len(self.array) // 2, value)

   def push_from_back(self, value):
      self.array.append(value)

   def pop_from_front(self):
      return (self.array or [-1]).pop(0)

   def pop_from_middle(self):
      return (self.array or [-1]).pop((len(self.array) - 1) // 2)

   def pop_from_back(self):
      return (self.array or [-1]).pop()

   def show_queue(self):
      return self.array

ob = Solution()
ob.push_from_back(10)
ob.push_from_back(20)
ob.push_from_front(30)
ob.push_from_middle(40)
ob.push_from_front(50)
print(ob.show_queue())
ob.pop_from_back()
print(ob.show_queue())
ob.pop_from_front()
print(ob.show_queue())
ob.pop_from_middle()
print(ob.show_queue())

輸入

ob = Solution()
ob.push_from_back(10)
ob.push_from_back(20)
ob.push_from_front(30)
ob.push_from_middle(40)
ob.push_from_front(50)
print(ob.show_queue())
ob.pop_from_back()
print(ob.show_queue())
ob.pop_from_front()
print(ob.show_queue())
ob.pop_from_middle()
print(ob.show_queue())

輸出

[50, 30, 40, 10, 20]
[50, 30, 40, 10]
[30, 40, 10]
[30, 10]

更新於: 2021年10月6日

460 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.