国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現的數據結構與算法之隊列詳解

2020-02-23 00:48:59
字體:
來源:轉載
供稿:網友

本文實例講述了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.pySusan

希望本文所述對大家的Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 公主岭市| 晴隆县| 沙河市| 闻喜县| 桂阳县| 拉萨市| 佳木斯市| 宣威市| 新余市| 柯坪县| 蛟河市| 定边县| 鹤庆县| 杭锦旗| 达尔| 石门县| 泾源县| 荔浦县| 拉萨市| 辽阳市| 嘉善县| 建阳市| 壶关县| 遵义市| 侯马市| 兴宁市| 麦盖提县| 义马市| 通渭县| 黔西| 连云港市| 汝南县| 丹江口市| 巴塘县| 略阳县| 永顺县| 昔阳县| 泰兴市| 石阡县| 泽库县| 大洼县|