阅读本篇教程,需要你具备一定的数据结构功底,否则,可能什么也看不懂。
很多人把collections模块下的deque说成是双端队列,这是极不准确的,标准模块里对它的定义如下
list-like container with fast appends and pops on either end
翻译过来应该是: 类似列表的容器,支持在两端快速的追加和删除元素。它是如此的灵活,提供了以下方法:
这些方法,已经远远超出了双端队列所能提供的方法,我个人对deque是这样理解的,它提供了及其灵活的功能,自身并不属于你所熟悉的任何一种数据结构,但我们可以在它的基础上非常轻松的实现数据结构,比如单向队列,双端队列,栈。
鉴于python标准库里已经实现了单向队列,所以本篇文章以deque为基础实现双端队列和栈这两种结构,向你展示如何使用deque
代码实现
from collections import deque
class DoubleQueue():
def __init__(self):
self.queue = deque()
def is_empty(self):
"""
判断是否为空队列
:return:
"""
return len(self.queue) == 0
def insert_front(self, data):
"""
从队首插入数据
:param data:
:return:
"""
self.queue.appendleft(data)
def insert_rear(self, data):
"""
从队尾插入数据
:param data:
:return:
"""
self.queue.append(data)
def delete_front(self):
"""
从队首删除数据
:return:
"""
return self.queue.popleft()
def delete_rear(self):
"""
从队尾删除数据
:return:
"""
return self.queue.pop()
def size(self):
"""
返回队列长度
:return:
"""
return len(self.queue)
dq = DoubleQueue()
print(dq.is_empty())
dq.insert_front(4)
dq.insert_rear(5)
dq.insert_rear(6)
print(dq.delete_front())
print(dq.delete_rear())
print(dq.size())
代码实现
from collections import deque
class Stack:
def __init__(self):
self.stack = deque()
def push(self, data):
"""
入栈
:param data:
:return:
"""
self.stack.append(data)
def pop(self):
"""
出栈
:return:
"""
return self.stack.pop()
def size(self):
"""
栈大小
:return:
"""
return len(self.stack)
def is_empty(self):
return self.size() == 0
stack = Stack()
stack.push(4)
stack.push(3)
stack.push(1)
print(stack.pop())
print(stack.size())
QQ交流群: 211426309