zoukankan      html  css  js  c++  java
  • 队列-Python 实现

    用 Python 来实现 队列和双端队列, 直接上代码理解即可. 队列蛮好理解的, 就是模拟咱生活中的排队. 先进, 先出嘛.

    """
    队列 - ADT
    队列 Queue 被构造为在队尾添加元素, 队首删除元素的有序集合, FIFO
    
    Queue(): 创建一个空队列
    enqueue(itme): 入队, 将元素添加到队尾
    dequeue(): 出队, 删除队首元素并返回
    is_empty(): 判断队列是否为空
    sise(): 返回队列中的元素个数
    
    思路:
        用 list 作为底层, 约定, 最左端为队尾, 最右端为队首
    
    """
    
    class Queue:
        def __init__(self):
            self.items = []
    
        def enqueue(self, item):
            """添加元素到队尾"""
            self.items.insert(0, item)
    
        def dequeue(self):
            """删除队首元素并返回"""
            return self.items.pop()
    
        def is_empty(self):
            return self.items == []
    
        def size(self):
            return len(self.items)
    
    
    if __name__ == '__main__':
        q = Queue()
    
        for i in range(1,6):
            q.enqueue(i)
        print(q.size())
    
        print(q.dequeue())
        print(q.dequeue())
    
        print(q.is_empty())
    
    

    Dquue - 双端队列

    """
    Deque
    
    双端队列被构造为项的集合, 可以从队首或队尾任意一段增删元素.
    
    Deque(): 创建一个新的Deque
    
    add_front(item): 从队首添加元素
    add_rear(item): 从队尾添加元素
    
    remove_front(item): 从队首删除元素, 并返回
    remove_rear(item): 从队尾删除元素, 并返回
    
    is_empty(): 判断队列是否空
    size(): 返回队列中的项数
    
    思路:
        用 list 作为底层架构, 并约定, 最左边为对尾, 最右侧为对首
    
    """
    
    
    class Deque:
        def __init__(self):
            self.items = []
    
        def add_front(self, item):
            """队首添加元素"""
            self.items.append(item)
    
        def remove_front(self):
            """队首删除元素"""
            return self.items.pop()
    
        def add_rear(self, item):
            """队尾添加元素"""
            self.items.insert(0, item)
    
        def remove_rear(self):
            """删除队尾元素"""
            return self.items.pop(0)
    
        def is_empty(self):
            return self.items == []
    
        def size(self):
            return len(self.items)
    
    
    if __name__ == '__main__':
        dq = Deque()
    
        for i in range(3):
            dq.add_front(i)
        print(dq.size())
    
        dq.add_rear(-1)
        print(dq.remove_front())
    
        print(dq.size())
    
  • 相关阅读:
    List.add方法传入的是地址(引用)而不是值
    List (或ArrayList) 转换为int[]数组 终于搞懂了
    01背包 完全背包 状态转移方程及空间复杂度优化
    十大排序算法整理(五):归并排序实现
    OpenStack Object Storage(Swift)概述
    OpenStack 组成 架构
    云计算 概述
    OpenStack概述
    C语言位运算、移位运算 经典示例
    Python数据库访问之SQLite3、Mysql
  • 原文地址:https://www.cnblogs.com/chenjieyouge/p/12459832.html
Copyright © 2011-2022 走看看