目录
一、定义
双端队列就是结合了队列和栈的特性,能做到先添加先删除,也能后添加先删除。
总结就是既能先入先出,也能后入先出。
二、双端队列的操作
1,判断是否为空
def is_empty(self):
"""判断队列是否为空"""
return self.items == []
2,在队头添加元素
def add_front(self, item):
"""在队头添加元素"""
self.items.insert(0,item)
3,在队尾添加元素
def add_rear(self, item):
"""在队尾添加元素"""
self.items.append(item)
4,从队头删除元素
def remove_front(self):
"""从队头删除元素"""
return self.items.pop(0)
5,从队尾删除元素
def remove_rear(self):
"""从队尾删除元素"""
return self.items.pop()
6,队列大小
def size(self):
"""返回队列大小"""
return len(self.items)
三、完整代码
代码的含义就是创建一个空列表,既能使用插入方法(insert)每次插入元素到队列的第一个位置(下标为0的位置),也能使用添加方法(append)每次添加元素到队列的最后一个位置。既能每次都删除(pop(0))队列的第一个元素(下标为0的元素),也能每次都删除(pop)队列最后一个元素
class Deque(object):
"""双端队列"""
def __init__(self):
self.items = []
def is_empty(self):
"""判断队列是否为空"""
return self.items == []
def add_front(self, item):
"""在队头添加元素"""
self.items.insert(0,item)
def add_rear(self, item):
"""在队尾添加元素"""
self.items.append(item)
def remove_front(self):
"""从队头删除元素"""
return self.items.pop(0)
def remove_rear(self):
"""从队尾删除元素"""
return self.items.pop()
def size(self):
"""返回队列大小"""
return len(self.items)
if __name__ == "__main__":
deque = Deque()
deque.add_front(1)
deque.add_front(2)
deque.add_rear(3)
deque.add_rear(4)
print(deque.size())
print(deque.remove_front())
print(deque.remove_front())
print(deque.remove_rear())
print(deque.remove_rear())
输出结果
4
2
1
4
3