Python栈与队列实现及文件目录遍历详解
本文详细解析Python中栈与队列的数据结构特性及代码实现,并深入探讨三种文件目录遍历方法:原生递归遍历、基于栈的深度优先遍历(DFS)以及基于队列的广度优先遍历(BFS)。通过对比不同实现方式的代码逻辑与执行流程,帮助开发者理解数据结构在文件系统操作中的实际应用。
Python栈与队列基础及目录遍历概述
本文通过具体示例,展示如何使用Python实现栈、队列数据结构,并演示如何利用这些结构进行文件目录的遍历操作。内容旨在为读者提供清晰的代码参考与实践思路。
一、 栈与队列基础
栈与队列的数据结构特性
1、 栈(Stack)
栈的核心特征是后进先出(LIFO),即最后进入的数据最先被取出。形象地说,这就像竹筒中的豆子,先进入的豆子会被压在底部,最后出来的反而是先放入的。
Python栈的压栈与出栈实现
mystack = []
#压栈[向栈中存数据]
mystack.append(1)
print(mystack)
mystack.append(2)
print(mystack)
mystack.append(3)
print(mystack)
#出栈[从栈中取数据]
mystack.pop()
print(mystack)
mystack.pop()
print(mystack)
2、 队列(Queue)
队列的核心特征是先进先出(FIFO),即最早进入的数据最先被取出。可以将其想象为一根水平放置的水管,水从一端流入,必然从另一端依次流出。
Python队列的入队与出队实现
#导入数据结构的集合
import collections
queue = collections.deque([1, 2, 3, 4, 5])
print(queue)
#入队[存数据]
queue.append(8)
print(queue)
queue.append(9)
print(queue)
#取数据
print(queue.popleft())
print(queue)
文件目录遍历的三种实现方式
二、 目录遍历算法
1、 递归遍历目录
递归方式遍历目录
import os
def diguigetAllDir(path,suojin):
# 如果文件夹中只有文件则返回
if os.path.isfile(path):
return
# 如果为空文件夹则返回
list1 = os.listdir(path)
if len(list1) == 0:
return
# 遍历list1列表
for item in list1:
print(' '*suojin,'%s'%item)
path1 = os.path.join(path,item)
if os.path.isdir(path1):
diguigetAllDir(path1, suojin + 4)
# 遍历当前目录
diguigetAllDir(os.getcwd(),0)
2、 使用栈模拟递归遍历目录
这种方法通常被称为深度优先遍历(Depth-First Search, DFS)。
基于栈的深度优先遍历(DFS)
import os
def stackGetAllDir(path):
if not os.listdir(path):
return
liststack = [path]
listsuojin = [0]
print(liststack)
while len(liststack) != 0:
path = liststack.pop() #路径出栈
suojin = listsuojin.pop() #缩进空格个数出栈
print(' ' * suojin, os.path.basename(path))
if os.path.isdir(path):
for i in os.listdir(path): #遍历路径下的全部文件
listsuojin.append(suojin +4)
liststack.append(os.path.join(path,i)) #文件名拼接成相对路径后入栈
# 遍历当前目录
stackGetAllDir(os.getcwd())
3、 使用队列模拟递归遍历目录
这种方法通常被称为广度优先遍历(Breadth-First Search, BFS)。
基于队列的广度优先遍历(BFS)
import os
import collections
def queueGetAllDir(path=" "):
if not os.listdir(path):
return
queue = collections.deque()
queue.append(path)
while len(queue) != 0:
filePath = queue.popleft()
fileList = os.listdir(filePath) #遍历filePath路径下的目录
for filename in fileList:
absFilePath = os.path.join(filePath,filename) #路径拼接
if os.path.isdir(absFilePath):
print("目录:",filename)
queue.append(absFilePath)
else:
print("文件:",filename)
# 遍历当前目录
queueGetAllDir(os.getcwd())
如需了解更多Python相关知识,建议参考本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》。
希望上述内容能对您的Python程序设计工作有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









