python之队列(deque模块)

deque 位于 collections 包下,主要包含以下方法:

class deque(MutableSequence[_T], Generic[_T]):
    @property
    def maxlen(self) -> Optional[int]: ...
    def __init__(self, iterable: Iterable[_T] = ...,
                 maxlen: Optional[int] = ...) -> None: ...
    def append(self, x: _T) -> None: ...
    def appendleft(self, x: _T) -> None: ...
    def clear(self) -> None: ...
    if sys.version_info >= (3, 5):
        def copy(self) -> deque[_T]: ...
    def count(self, x: _T) -> int: ...
    def extend(self, iterable: Iterable[_T]) -> None: ...
    def extendleft(self, iterable: Iterable[_T]) -> None: ...
    def insert(self, i: int, x: _T) -> None: ...
    def index(self, x: _T, start: int = ..., stop: int = ...) -> int: ...
    def pop(self, i: int = ...) -> _T: ...
    def popleft(self) -> _T: ...
    def remove(self, value: _T) -> None: ...
    def reverse(self) -> None: ...
    def rotate(self, n: int) -> None: ...

简单介绍一下栈、队列和双端队列

栈:只允许在一端进行插入、删除操作,这一端被称为栈顶(top),另一端则被称为栈底(bottom),从栈顶插入一个元素被称为进栈(push),将一个元素插入栈顶被称为“压入栈”,从栈顶删除一个元素被称为出栈(pop)。

队列:它只允许在表的前端(front)进行删除操作,在表的后端(rear)进行插入操作。进行插入操作的端被称为队尾,进行删除操作的端被称为队头。

队列

双端队列:允许在两端同时进行插入、删除操作

双端队列
from collections import deque

# deque当成栈
stack = deque(('Kotlin', 'Python'))
# 元素入栈
stack.append('Erlang')
stack.append('Swift')
print('stack中的元素:', stack)  # deque(['Kotlin', 'Python', 'Erlang', 'Swift'])
# 元素出栈,后添加的元素先出栈
print(stack.pop())  # Swift
print(stack.pop())  # Erlang
print(stack)  # deque(['Kotlin', 'Python'])

# deque 当成队列,使用append入队列,popleft出队列
from collections import deque

q = deque(('Kotlin', 'Python'))
# 元素加入队列
q.append('Erlang')
q.append('Swift')
print('q中的元素:', q)  # q中的元素: deque(['Kotlin', 'Python', 'Erlang', 'Swift'])
# 元素出队列,先添加的元素先出队列
print(q.popleft())  # Kotlin
print(q.popleft())  # Python
print(q)  # deque(['Erlang', 'Swift'])

# deque 的rotate() 方法,该方法的作用是将队列的队尾元素移动到队头,使之首尾相连
q = deque(range(5))
print('q中的元素:', q)
# 执行旋转,使之首尾相连
q.rotate()
print('q中的元素:', q)
# 再次执行旋转,使之首尾相连
q.rotate()
print('q中的元素:', q)

你可能感兴趣的:(python之队列(deque模块))