2. 队列的实现

Posted si-lei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2. 队列的实现相关的知识,希望对你有一定的参考价值。

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())

    运行结果:

    技术分享图片

以上是关于2. 队列的实现的主要内容,如果未能解决你的问题,请参考以下文章

perl中的队列

完全下载文件时,将下载的文件从一个片段传递到另一个片段

数据结构 Java数据结构 栈和队列 以及LeetCode相关面试题

数据结构之栈和队列

数据结构《三》栈与队列的实现

RabbitMQ的动态创建交换机、队列、绑定、死信队列,延迟队列代码实现