队列与双端队列的实现
队列
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。

队列的实现
同栈一样,队列也可以用顺序表或者链表实现。
操作
- Queue() 创建一个空的队列
- enqueue(item) 往队列中添加一个item元素
- dequeue() 从队列头部删除一个元素
- is_empty() 判断一个队列是否为空
- size() 返回队列的大小
1 class Queue(): 2 """队列""" 3 def __init__(self): 4 self.items=[] 5 6 def is_empty(self): 7 return self.items==[] 8 9 def enqueue(self,item): 10 """进队列""" 11 self.items.append(item) 12 13 def dequeue(self): 14 """出队列""" 15 return self.items.pop(0) 16 17 def size(self): 18 return len(self.items) 19 20 if __name__ == '__main__': 21 q=Queue() 22 q.enqueue(1) 23 q.enqueue(2) 24 q.enqueue(3) 25 q.enqueue(4) 26 print(q.dequeue()) 27 print(q.dequeue()) 28 print(q.dequeue()) 29 print(q.dequeue()) 30 #打印结果 31 # 1 32 # 2 33 # 3 34 # 4
双端队列
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。

操作
- Deque() 创建一个空的双端队列
- add_front(item) 从队头加入一个item元素
- add_rear(item) 从队尾加入一个item元素
- remove_front() 从队头删除一个item元素
- remove_rear() 从队尾删除一个item元素
- is_empty() 判断双端队列是否为空
- size() 返回队列的大小
1 class Deque(): 2 """双端队列""" 3 def __init__(self): 4 self.items=[] 5 6 def is_empty(self): 7 """判断队列是否为空""" 8 return self.items==[] 9 10 def add_front(self,item): 11 """在队头添加元素""" 12 self.items.insert(0,item) 13 14 def add_rear(self,item): 15 """在队尾添加元素""" 16 self.items.append(item) 17 18 def remove_front(self): 19 """从队头删除元素""" 20 return self.items.pop(0) 21 22 def remove_rear(self): 23 """从队尾删除元素""" 24 return self.items.pop() 25 26 def size(self): 27 """返回队列大小""" 28 return len(self.items) 29 30 if __name__ == '__main__': 31 d=Deque() 32 d.add_front(1) 33 d.add_front(2) 34 d.add_rear(3) 35 d.add_rear(4) 36 print(d.remove_front()) 37 print(d.remove_front()) 38 print(d.remove_rear()) 39 print(d.remove_rear()) 40 #打印结果 41 # 2 42 # 1 43 # 4 44 # 3
posted on 2019-09-18 22:05 cherry_ning 阅读(850) 评论(0) 收藏 举报
浙公网安备 33010602011771号