zoukankan      html  css  js  c++  java
  • problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 基本数据结构 -- 队列

    1. 什么是队列?

    队列是项的有序结合,其中添加新项的一端称为队尾,移除项的一端称为队首。

    FIFO:先进先出

    2. 队列抽象数据类型

    队列操作如下:

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

    3. python实现队列

    class Queue:
        def __init__(self):
            self.items = []
    
        def isEmpty(self):
            return self.items == []
    
        def enqueue(self,item):
            self.items.insert(0,item)
    
        def dequeue(self):
            return self.items.pop()
    
        def size(self):
            return len(self.items)

    4. 模拟:烫手山芋

    在这个游戏中,孩子们围成一个圈,并尽可能快的将一个山芋递给旁边的孩子。在某一个时间,动作结束,有山芋的孩子从圈中移除。游戏继续开始直到剩下最后一个孩子。
    烫手山芋游戏介绍
    假设拿着山芋的孩子在队列的前面。当拿到山芋的时候,这个孩子将先出列再入队列,把他放在队列的最后。经过 num 次的出队入队后,前面的孩子将被永久移除队列。并且另一个周期开始,继续此过程,直到只剩下一个名字(队列的大小为 1)。
    from pythonds.basic.queue import Queue
    
    def hotPotato(nameList,num):
        simqueue = Queue()
        for name in nameList:
            simqueue.enqueue(name)
        while simqueue.size() > 1:
            for i in range(num):
                simqueue.enqueue(simqueue.dequeue())
            simqueue.dequeue()
        return simqueue.dequeue()
    
    print(hotPotato(["Bill", "David", "Susan", "Jane", "Kent", "Brad"], 7))

  • 相关阅读:
    Android必学——AsyncTask
    成员变量 局部变量
    Java中private、protected、public和default的区别
    实现图片的一个轮转功能
    vmware14克隆后UUID相同的解决方法
    curl
    python3 configparser模块
    python2.7系统性能监控psutil模块
    mysql5.7.22tar包安装
    通过pip3安装ipython
  • 原文地址:https://www.cnblogs.com/lpgit/p/9465060.html
Copyright © 2011-2022 走看看