Python中的队列是什么?举例说明
队列是一种线性数据结构,它遵循**先进先出** (FIFO) 机制。
先进入队列的元素将首先被处理。
示例
可以通过公交车站的队列来理解队列数据结构。先到达公交车站的人是队列中的第一个人,其他人则在他到达后依次排队。当公交车到达时,先到达公交车站的人将是第一个上车的人,其余的人将按照到达公交车站的顺序上车。因此,遵循**先进先出**机制。
Python中队列的实现
Python中的队列可以通过多种方式实现,可以使用其他线性数据结构或Python库中的内置模块。
方法1 - 使用列表实现
Python中的队列可以使用列表实现。这种方法效率不高,因为在列表开头插入或删除元素需要O(n)时间,这比其他方法慢。
涉及的操作
append() - 此函数在队列末尾添加一个元素。
pop(0) - 此函数删除并返回队列中的第一个元素。
示例
queue=[]
queue.append(1)
queue.append(2)
queue.append(3)
print("Initial queue",queue)
print("Element popped from the queue")
print(queue.pop(0))
print(queue.pop(0))
print("Queue after popping some elements",queue)输出
Initial queue [1, 2, 3] Element popped from the queue 1 2 Queue after popping some elements [3]
队列为空后,无法再删除更多元素。这样做会导致异常。
queue.pop(0) IndexError: pop from empty list
方法2 - 使用queue.Queue实现
这是使用Python内置模块实现队列的方法。我们需要从queue导入Queue。我们可以用特定大小初始化队列。大小为零表示无限队列。
涉及的操作
maxsize - 队列中允许的最大元素数
get() - 删除并返回队列中的第一个元素。如果队列为空,则等待直到队列至少有一个元素。
get_nowait() - 删除并返回队列中的第一个元素。如果队列为空,则引发异常。
put(item) - 在队列末尾添加一个元素。如果队列已满,则等待直到有空位可用。
put_nowait(item) - 在队列末尾添加一个元素。如果队列已满,则引发异常。
full() - 如果队列已满,则返回True,否则返回False。
empty() - 如果队列为空,则返回True,否则返回False
qsize() - 返回队列中存在的元素数量
示例
from queue import Queue
q=Queue(maxsize=3)
q.put(1)
q.put(2)
q.put(3)
print("Is queue full",q.full())
print("Element popped from the queue")
print(q.get())
print(q.get())
print("Number of elements in queue",q.qsize())
print("Is queue empty",q.empty())输出
Is queue full True Element popped from the queue 1 2 Number of elements in queue 1 Is queue empty False
方法3 - 使用collections.deque实现
这是在Python中实现队列的另一种方法。我们需要从collections模块导入deque。
涉及的操作
append() - 此函数在队列末尾添加一个元素。
popleft() - 此函数以O(1)的时间复杂度删除并返回队列中的第一个元素。
示例
from collections import deque
queue=deque()
queue.append(1)
queue.append(2)
queue.append(3)
print("Intial queue: ",queue)
print("Element popped from the queue")
print(queue.popleft())
print(queue.popleft())
print("Queue after popping some elements: ",queue)输出
Intial queue: deque([1, 2, 3]) Element popped from the queue 1 2 Queue after popping some elements: deque([3])
在空deque上使用popleft()函数将引发异常。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP