zoukankan      html  css  js  c++  java
  • python数据结构之队列【转载】

    队列:先进先出
    应用场景:我们的计算机实验室有 30 台计算机与一台打印机联网。当学生想要打印时,他们的打印任务与正在等待的所有其他打印任务“一致”。
    第一个进入的任务是先完成。如果你是最后一个,你必须等待你前面的所有其他任务打印.

    1、单向队列的实现方法

    Queue() : 创建一个空的新队列。 它不需要参数,并返回一个空队列。
    enqueue(item) : 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。
    dequeue() : 从队首移除项。它不需要参数并返回 item。 队列被修改。
    isEmpty() : 查看队列是否为空。它不需要参数,并返回布尔值。
    size() :返回队列中的项数。它不需要参数,并返回一个整数。

     列表方法实现单向队列

    class Queue():
        def __init__(self):
            self.items = []
    
        def enqueue(self, item):  # 插入数据
            self.items.insert(0, item)
    
        def dequeue(self):  # 删除数据
            return self.items.pop()
    
        def isEmpty(self):  # 判断是否为空
            return self.items == []
    
        def size(self):  # 获取列表大小
            return len(self.items)
    
    
    if __name__ == '__main__':
        q = Queue()
        q.enqueue(1)
        q.enqueue(2)
        q.enqueue(3)
        print(q.dequeue())
        print(q.dequeue())
        print(q.dequeue())
        # 输出结果
        # 1
        # 2
        # 3
    
        kids = ['A', 'B', 'C', 'D', 'E', 'F']
        queue = Queue()
        for kid in kids:
            queue.enqueue(kid)  # A对头F队尾
        while queue.size() > 1:
            for i in range(6):  # 每循环一次,传递一次
                kid = queue.dequeue()
                queue.enqueue(kid)
            queue.dequeue()
        print('获胜的选手是:', queue.dequeue())
    
        # 输出结果
        # 获胜的选手是: E

    2、双向队列的实现方法

    Deque() 创建一个空的新 deque。它不需要参数,并返回空的 deque。
    addFront(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。
    addRear(item) 将一个新项添加到 deque 的尾部。它需要 item 参数并不返回任何内容。
    removeFront() 从 deque 中删除首项。它不需要参数并返回 item。deque 被修改。
    removeRear() 从 deque 中删除尾项。它不需要参数并返回 item。deque 被修改。
    isEmpty() 测试 deque 是否为空。它不需要参数,并返回布尔值。
    size() 返回 deque 中的项数。它不需要参数,并返回一个整数。
    class Deque():
        def __init__(self):
            self.items = []
    
        def addFront(self, item):  # 增加到队头
            self.items.insert(0, item)
    
        def addRear(self, item):  # 增加到队尾
            self.items.append(item)
    
        def removeFront(self):  # 从队尾删除
            return self.items.pop()
    
        def removeRear(self):  # 从队头删除
            return self.items.pop(0)
    
        def isEmpty(self):  # 判断队列是否为空
            return self.items == []
    
        def size(self):  # 获取队列的大小
            return len(self.items)
    
    
    def isHuiWen(s):
        """
            双端队列应用案例:回文检查,回文是一个字符串,读取首尾相同的字符
        :param s:
        :return:
        """
        ex = True
        q = Deque()
        for ch in s:
            q.addFront(ch)
        while q.size() > 1:
            if q.removeFront() != q.removeRear():
                ex = False
                break
        return ex
    
    
    if __name__ == '__main__':
        q = Deque()
        q.addFront(1)
        q.addFront(2)
        q.addFront(3)
        print(q.removeRear())
        print(q.removeRear())
        print(q.removeRear())
    
        # 输出结果
        # 3
        # 2
        # 1
    
        print(isHuiWen('heireh'))  # False
        print(isHuiWen('mdm'))  # True

     转载:https://www.cnblogs.com/bobo-zhang/p/10525482.html

  • 相关阅读:
    而立之年的程序员创业者,写给不甘平凡的自己和80、90后!
    无焦虑,不成长!三大方法让你走出焦虑!
    [Chat]实战:仿网易云课堂微信小程序开发核心技术剖析和经验分享
    [干货教程]仿网易云课堂微信小程序开发实战经验
    微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
    微信支付之扫码支付开发:我遇到的坑及解决办法(附:Ecshop 微信支付插件)
    OpenCV 4.3 编译和配置
    OpenCV 之 基本绘图
    OpenCV 之 空间滤波
    Qt 地址薄 (二) 添加地址
  • 原文地址:https://www.cnblogs.com/ygbh/p/13878323.html
Copyright © 2011-2022 走看看