如何理解队列
先进者先出,这就是典型的“队列”。
支持的操作
栈:入栈:push() 出栈:pop()
队列: 入队:enqueue() 出队:dequeue()
所以,队列跟栈一样,也是一种操作受限的线性表数据结构。
作为一种基本的数据结构,队列应用非常广泛,特别是具有一些额外特性的队列,比如循环队列、阻塞队列、并发队列。它们在很多偏底层系统、框架、中间件的开发中,起着关键性的作用。
顺序队列和链式队列
同栈相同,用数组实现的队列叫作顺序队列,用链表实现的队列叫作链式队列。
顺序队列简单代码:
"""
Queue based upon array
用数组实现的队列
Author: Wenru
"""
from typing import Optional
class ArrayQueue:
def __init__(self, capacity: int):
self._items = []
self._capacity = capacity
self._head = 0
self._tail = 0
def enqueue(self, item: str) -> bool:
if self._tail == self._capacity:
if self._head == 0:
return False
else:
for i in range(0, self._tail - self._head):
self._items[i] = self._items[i + self._head]
self._tail = self._tail - self._head
self._head = 0
self._items.insert(self._tail, item)
self._tail += 1
return True
def dequeue(self) -> Optional[str]:
if self._head != self._tail:
item = self._items[self._head]
self._head += 1
return item
else:
return None
def __repr__(self) -> str:
return " ".join(item for item in self._items[self._head : self._tail])
比起栈的数组实现,队列的数组实现稍微复杂一点。因为对于栈来说,我们只需要一个栈顶指针就可以了。但是队列需要两个指针:一个是head指针,指向队头;一个是tail指针,指向队尾。