欢迎访问宙启技术站
智能推送

使用collections.deque实现双向队列的方法

发布时间:2024-01-14 09:52:41

collections.deque是Python中的一个双向队列(deque)实现,它实现了在队列两端的快速添加和弹出操作。deque支持在O(1)的时间复杂度内对队列两端进行添加和弹出操作。

使用collections.deque可以轻松地创建一个双向队列对象,并使用其提供的方法来操作队列。下面是一些使用collections.deque实现双向队列的常用方法:

1. 创建一个双向队列对象:

可以使用deque()函数来创建一个空的双向队列对象。例如:

   from collections import deque

   dq = deque()
   

2. 在队列两端添加元素:

可以使用append()和appendleft()方法在队列的右端和左端添加一个或多个元素。例如:

   dq.append(10)   # 在队列的右端添加一个元素
   dq.appendleft(20)   # 在队列的左端添加一个元素
   dq.extend([30, 40, 50])   # 在队列的右端添加多个元素
   dq.extendleft([60, 70, 80])   # 在队列的左端添加多个元素
   

3. 在队列两端弹出元素:

可以使用pop()和popleft()方法从队列的右端和左端弹出一个元素。例如:

   element = dq.pop()   # 从队列的右端弹出一个元素
   element = dq.popleft()   # 从队列的左端弹出一个元素
   

4. 判断队列是否为空:

可以使用len()函数判断队列是否为空。例如:

   if len(dq) == 0:
       print("队列为空")
   

5. 获取队列的大小:

可以使用len()函数获取队列的大小。例如:

   size = len(dq)
   

6. 获取队列的元素:

可以使用[index]的方式获取队列中某个位置的元素,可以使用list()函数将队列转换为列表。例如:

   element = dq[0]   # 获取队列中第一个元素
   lst = list(dq)    # 将队列转换为列表
   

下面是一个使用collections.deque实现双向队列的例子,该例子实现了一个任务调度器,可以添加和弹出任务,并展示当前任务队列:

from collections import deque

class TaskScheduler:
    def __init__(self):
        self.tasks = deque()

    def add_task(self, task):
        self.tasks.append(task)

    def pop_task(self):
        if len(self.tasks) > 0:
            return self.tasks.popleft()
        else:
            return None

    def print_tasks(self):
        print("当前任务队列:", list(self.tasks))

# 创建一个任务调度器对象
scheduler = TaskScheduler()

# 添加任务到任务队列
scheduler.add_task("任务1")
scheduler.add_task("任务2")
scheduler.add_task("任务3")

# 打印当前任务队列
scheduler.print_tasks()    # 输出:当前任务队列: ['任务1', '任务2', '任务3']

# 弹出一个任务
task = scheduler.pop_task()
print("弹出的任务:", task)    # 输出:弹出的任务: 任务1

# 打印当前任务队列
scheduler.print_tasks()    # 输出:当前任务队列: ['任务2', '任务3']

使用collections.deque实现双向队列可以方便地进行队列的添加和弹出操作,并支持在O(1)的时间复杂度内进行操作。