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 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告