日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现队列_用Python实现的数据结构与算法:队列

發布時間:2025/3/8 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现队列_用Python实现的数据结构与算法:队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

隊列(Queue)是一種先進先出(FIFO)的線性數據結構,插入操作在隊尾(rear)進行,刪除操作在隊首(front)進行。

二、ADT

隊列ADT(抽象數據類型)一般提供以下接口:

Queue() 創建隊列

enqueue(item) 向隊尾插入項

dequeue() 返回隊首的項,并從隊列中刪除該項

empty() 判斷隊列是否為空

size() 返回隊列中項的個數

隊列操作的示意圖如下:

三、Python實現

使用Python的內建類型list列表,可以很方便地實現隊列ADT:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

class Queue:

def __init__(self):

self.items = []

def enqueue(self, item):

self.items.append(item)

def dequeue(self):

return self.items.pop(0)

def empty(self):

return self.size() == 0

def size(self):

return len(self.items)

四、應用

著名的 約瑟夫斯問題(Josephus Problem)是應用隊列(確切地說,是循環隊列)的典型案例。在 約瑟夫斯問題 中,參與者圍成一個圓圈,從某個人(隊首)開始報數,報數到n+1的人退出圓圈,然后從退出人的下一位重新開始報數;重復以上動作,直到只剩下一個人為止。

值得注意的是,Queue類只實現了簡單隊列,上述問題實際上需要用循環隊列來解決。在報數過程中,通過“將(從隊首)出隊的人再入隊(到隊尾)”來模擬循環隊列的行為。具體代碼如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

def josephus(namelist, num):

simqueue = Queue()

for name in namelist:

simqueue.enqueue(name)

while simqueue.size() > 1:

for i in xrange(num):

simqueue.enqueue(simqueue.dequeue())

simqueue.dequeue()

return simqueue.dequeue()

if __name__ == '__main__':

print(josephus(["Bill", "David", "Kent", "Jane", "Susan", "Brad"], 3))

運行結果:

$ python josephus.py

Susan

總結

以上是生活随笔為你收集整理的python实现队列_用Python实现的数据结构与算法:队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。