zoukankan      html  css  js  c++  java
  • 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())

        运行结果:

        

    文章写来不易,转载请标注。。。欢迎关注!
  • 相关阅读:
    【校招面试 之 C/C++】第23题 C++ STL(五)之Set
    Cannot create an instance of OLE DB provider “OraOLEDB.Oracle” for linked server "xxxxxxx".
    Redhat Linux安装JDK 1.7
    ORA-10635: Invalid segment or tablespace type
    Symantec Backup Exec 2012 Agent for Linux 卸载
    Symantec Backup Exec 2012 Agent For Linux安装
    You must use the Role Management Tool to install or configure Microsoft .NET Framework 3.5 SP1
    YourSQLDba介绍
    PL/SQL重新编译包无反应
    MS SQL 监控数据/日志文件增长
  • 原文地址:https://www.cnblogs.com/si-lei/p/9260807.html
Copyright © 2011-2022 走看看