1. 普通队列的实现:
(1)队列的表现形式:
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操 作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。
(2)队列的操作:
Queue(): 创建一个空的队列
enqueue(item): 往队列中添加一个item元素
dequeue(): 从队列头部删除一个元素
is_empty(): 判断一个队列是否为空
size(): 返回队列的大小
(3)队列的实现:
1 class Queue(object): 2 """队列""" 3 4 def __init__(self): 5 self.__list = [] 6 7 def enqueue(self, item): 8 """往队列中添加一个item元素""" 9 self.__list.append(item) 10 11 def dequeue(self): 12 """从队列头部删除一个元素""" 13 return self.__list.pop(0) 14 15 def is_empty(self): 16 """判断一个队列是否为空""" 17 return self.__list == [] 18 19 def size(self): 20 """返回队列的大小""" 21 return len(self.__list) 22 23 24 if __name__ == "__main__": 25 q = Queue() 26 q.enqueue(1) 27 q.enqueue(2) 28 q.enqueue(3) 29 q.enqueue(4) 30 print(q.dequeue()) 31 print(q.dequeue()) 32 print(q.dequeue()) 33 print(q.dequeue())
运行结果:
2. 双端队列的实现:
(1)双端队列的表现形式:
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
(2)双端队列的操作:
Deque(): 创建一个空的双端队列
add_front(item): 从队头加入一个item元素
add_rear(item): 从队尾加入一个item元素
remove_front(): 从队头删除一个item元素
remove_rear(): 从队尾删除一个item元素
is_empty(): 判断双端队列是否为空
size(): 返回队列的大小
(3)双端队列的实现:
1 class Deque(object): 2 """双端队列""" 3 def __init__(self): 4 self.__list = [] 5 6 def add_front(self, item): 7 """从队头加入一个item元素""" 8 self.__list.insert(0, item) 9 10 def add_rear(self, item): 11 """从队尾加入一个item元素""" 12 self.__list.append(item) 13 14 def remove_front(self): 15 """从队头删除一个item元素""" 16 return self.__list.pop(0) 17 18 def remove_rear(self): 19 """从队尾删除一个item元素""" 20 return self.__list.pop() 21 22 def is_empty(self): 23 """判断双端队列是否为空""" 24 return self.__list == [] 25 26 def size(self): 27 """返回队列的大小""" 28 return len(self.__list) 29 30 31 if __name__ == "__main__": 32 deque = Deque() 33 deque.add_front(1) 34 deque.add_front(2) 35 deque.add_rear(3) 36 deque.add_rear(4) 37 print(deque.size()) 38 print(deque.remove_front()) 39 print(deque.remove_front()) 40 print(deque.remove_rear()) 41 print(deque.remove_rear())
运行结果: