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

        运行结果:

        

    文章写来不易,转载请标注。。。欢迎关注!
  • 相关阅读:
    【数据库功能测试】之shell脚本执行sql命令
    【数据库使用】 mysql服务启动脚本
    【数据库功能测试】之存储过程
    各类排序算法实现
    Poj1830开关问题,高斯消元
    Poj3370Halloween treats鸽巢原理
    Poj2356Find a multiple鸽巢原理
    Poj3145Harmony Forever线段树+鸽巢原理
    hiho16动态lca
    hiho15周离线lca
  • 原文地址:https://www.cnblogs.com/si-lei/p/9260807.html
Copyright © 2020-2023  润新知