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

  • 相关阅读:
    CodeForces 7B
    CodeForces 4D
    离散化
    线段树入门
    洛谷 P3951 小凯的疑惑(赛瓦维斯特定理)
    Codeforces 1295D Same GCDs (欧拉函数)
    Codeforces 1295C Obtain The String (二分)
    Codeforces 1295B Infinite Prefixes
    Codeforces 1295A Display The Number(思维)
    Codeforces 1294F Three Paths on a Tree(树的直径,思维)
  • 原文地址:https://www.cnblogs.com/ygbh/p/13878323.html
Copyright © 2011-2022 走看看