首先我們來(lái)了解一下
什么是隊(duì)列高职?
隊(duì)列是一種特殊的線性表怔锌,特殊之處在于它只允許在表的前端(front)進(jìn)行刪除操作埃元,而在表的后端(rear)進(jìn)行插入操作牵啦,和棧一樣,隊(duì)列是一種操作受限制的線性表楞件。進(jìn)行插入操作的端稱為隊(duì)尾裳瘪,進(jìn)行刪除操作的端稱為隊(duì)頭。其特點(diǎn)是:先進(jìn)先出黄伊。就想日常生活中排隊(duì)打飯一樣:先來(lái)先打派殷。
什么是廣度遍歷墓阀?
廣度優(yōu)先遍歷是聯(lián)通如的一種遍歷策略斯撮。因?yàn)樗乃枷胧菑囊粋€(gè)頂點(diǎn)V0開(kāi)始扶叉,輻射狀地優(yōu)先遍歷其周圍較廣的區(qū)域,故得名溢十。
其基本思想:
1达吞、從圖中某個(gè)頂點(diǎn)V0出發(fā),并訪問(wèn)此頂點(diǎn)乌庶;
2契耿、從V0出發(fā)螃征,訪問(wèn)V0的各個(gè)未曾訪問(wèn)的鄰接點(diǎn)W1,W2踢械,…,Wk;然后,依次從W1,W2,…,Wk出發(fā)訪問(wèn)各自未被訪問(wèn)的鄰接點(diǎn)内列;
3背率、重復(fù)步驟2,直到全部頂點(diǎn)都被訪問(wèn)為止交排。
了解了上面的基本知識(shí)點(diǎn)饵筑,我們來(lái)看一下用隊(duì)列模擬遍歷目錄(廣度遍歷)算法的實(shí)現(xiàn)
import os
import collections
def getAllDirBfs(path):
queue = collections.deque()
# 進(jìn)隊(duì)
? ? queue.append(path)
while len(queue) !=0:
# 出隊(duì)數(shù)據(jù)
? ? ? ? dirPath = queue.popleft()
# 找出所有的文件
? ? ? ? fileList = os.listdir(dirPath)
for fileNamein fileList:
# 絕對(duì)路徑
? ? ? ? ? ? fileAbsPath =? os.path.join(dirPath,fileName)
# 判斷是否是目錄根资,是目錄就進(jìn)隊(duì)同窘,不是就打印
? ? ? ? ? ? if os.path.isdir(fileAbsPath):
print("目錄:"+ fileName)
queue.append(fileAbsPath)
else:
print("普通文件:"+fileName)
getAllDirBfs(r"E:\python\PycharmProjects\python基礎(chǔ)學(xué)習(xí)\day05")