• 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

  • 相关阅读:
    spring快速入门
    Vue整合ElementUI搭建项目
    .Net的Rsa解密
    Maven配置国内仓库
    pom.xml
    SpringBoot文件打包后修改配文件
    .net 过滤器
    c#语法糖汇总
    git修改远程地址
    abp Application层,接口服务层,获取请求的信息
  • 原文地址:https://www.cnblogs.com/ygbh/p/13878323.html
Copyright © 2020-2023  润新知