队列的Python实现与实例分析

队列是只有一端可以进行插入操作,而另一端可以进行删除操作的有序线性存储结构,满足先进先出的约束。

生活中典型的实例就是排队,先到的人排在前面,可先得到服务,后到的人排在后面,并且不能插队。

计算机应用中典型的实例就是打印机,先发送的打印任务可以先被执行,之后的都要排队等候

Python实现

在 Python 中,和栈一样,同样可以用列表作为队列的底层实现,只需要确定列表的哪一端作为队列的头,也即删除操作端,哪一端作为队列的尾,也即插入操作端。同时,把队列抽象为类,队列的先进先出操作实现为类的方法

假定队尾在列表中的位置为 0。这允许我们使用列表上的插入函数向队尾添加新元素。弹出操作可用于删除队首的元素(列表的最后一个元素)。这样入队的复杂度为 O(n),出队为 O(1)。如果队尾和队首在列表中的位置换一下,则入队的复杂度为 O(1),出队为 O(n)。

以下为按照前面一种方式的队列的Python实现

Queue 实现一个队列类,可通过 Queue() 建立一个空队列

is_empty 操作判断队列是否为空

enqueue 操作将新元素插入到列尾

dequeue 操作将弹出并删除队首的元素

size 操作返回队列的大小

class Queue:
    def __init__(self):
        self.items=[]
    def is_empty(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)

以上为队列的最简单实现,对比栈的实现,可以看出两者非常相像,只在插入操作上有所不同。

应用实例

约瑟夫问题:n个人围成一个圈,每个人分别标注为1、2、…、n,要求从1号从1开始报数,报到k的人出圈,接着下一个人又从1开始报数,如此循环,直到只剩最后一个人时,该人即为胜利者。

解约瑟夫问题的一种方法是模拟这个过程,模拟的载体可以是队列,也可以是链表,下面就用列队来模拟这个过程

循环报数的过程可以看作是一个先报数先出的过程,用队列来模拟时,将当前报数的人弹出,如果报的不是k时,再插入到队尾,从而得以循环,如果报的是k,则抛弃。直至剩下最后一个人。

下面是在生成 Queue 类的基础下,Python 解决约瑟夫问题的一个实例代码,以实际人名来仿真n个人,报数为7时删除,输出最后的胜利者。

#约瑟夫问题仿真函数
def circle(k,nameList):
    queue1=Queue()
    for i in range(len(nameList)):  #将名字列表逐个插入队列
        queue1.enqueue(nameList[i])
    i=1
    while queue1.size()!=1:
        temp=queue1.dequeue()       #叫到哪个将哪个弹出
        if i!=k:
            queue1.enqueue(temp)    #不是第k个再插入
        else :
            i=0                     #是第k个重新计数
        i+=1
    return queue1.dequeue()
#主函数
if __name__=='__main__':
    nameList=["Bill","David","Susan","Jane","Kent","Brad"]
    print(circle(7,nameList))
#输出结果
Kent
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python算法设计与分析一书是由王硕编写的一本与Python算法有关的教材,主要涉及算法设计、分析和优化等方面的内容。这本书不仅涉及了一些基本的数据结构和算法,还介绍了一些高级算法和复杂的数据结构处理方法。 在计算机科学的研究领域中,算法设计与分析是非常重要的一部分。这本书将这一领域的研究内容与Python编程语言有机地结合起来,使读者更容易理解算法工作原理和复杂度分析。 本书从基本算法设计思想、分治法、贪心算法、动态规划、图论等方面展开,结合Python语言的特点,提供了一些常用的编程策略,如递归思想、迭代思想等,并详细解释了相关算法和数据结构实现方法。 此外,本书所涉及的算法还包括一些高级算法,如字符串算法、几何算法、概率算法、算法优化等,这些算法在计算机科学中应用广泛,具有重要意义。 总的来说,本书可以帮助读者深入理解算法和数据结构,提高编程能力,对于计算机科学、程序员和算法研究人员来说都是一本非常实用的教材。 ### 回答2: 《Python算法设计与分析》是一本非常重要的书,是由王硕所著的,通过该书的学习,可以深入学习Python语言的基本知识,并且了解算法在Python语言中的应用。 本书从基础的数据结构开始介绍,如排序和查找算法,然后逐渐涉及到高级算法。包括图形算法、动态规划算法、贪心算法等等。除此之外,本书涵盖了Python中经常使用的算法和数据结构,包括列表、数组、链表、二叉树、哈希表、优先队列等,可谓全面细致。 王硕老师在书中不仅介绍了各种算法和数据结构实现方法,还重点讲述了算法的设计和分析过程。在算法设计中,老师用很形象的实例来说明,让读者更加容易理解。同时,他还提供了很多示例程序,并且讲解得非常详细和易懂。 此外,王硕还给出了大量练习题,这些练习题包含了书中介绍的算法和数据结构,可以帮助读者巩固理论,并加强实践操作。此外,他还提供了一些Python的库和工具,帮助读者更好地应用算法设计和分析。 总之,这本书相当实用和权威。对于想要学习Python算法设计和分析的人,这是一本非常好的参考书。建议理工科专业的学生认真学习,一定会对未来的学习和工作产生良好的帮助。 ### 回答3: Python算法设计与分析王硕答案是一本关于Python编程语言的算法设计与分析的书籍,该书主要讲解了Python语言在算法分析实现方面的优势。本书主要分为七章,涵盖了排序算法、字符串算法、动态规划、贪心算法、图论和计算几何等核心算法。 作者通过实例和代码的方式向读者演示如何用Python实现各种算法,并展示了Python在算法分析实现方面的独特魅力。书中的例题和练习题非常实用,帮助读者理解算法思想和Python编程语言,并提供了丰富的练习机会,巩固学习成果。 此书对于学习算法和Python编程语言的人群来说有很大的帮助,因为它具有简洁明快的语言和良好的逻辑性,适合初学者和有一定编程基础的读者。此外,此书中的例题和代码对于实际工作中的编程问题也有很好的借鉴作用,可以帮助读者更好地解决实际问题。总之,Python算法设计与分析王硕答案是一本值得推荐的书籍,适合广大Python程序员和算法爱好者阅读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海晨威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值