用栈模拟递归遍历目录(深度遍历)

什么是栈?

栈是一种“先进后出”的一种数据结构,有压栈出栈两种操作方式。如下图?:


用栈模拟递归遍历目录(深度遍历)_第1张图片
栈的压栈和出栈

什么是深度遍历呢?

 假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可从图中某个顶点发v 出发,访问此顶点,然后依次从v 的未被访问的邻接点出发深度优先遍历图,直至图中所有和v 有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

用栈模拟递归遍历目录(深度遍历)_第2张图片

了解了上面的一些基本点就让我们来看来一些代码吧:

import os

def getAllDirDe(path):

stack = []

stack.append(path)

# 处理栈,当栈为空的时候结束循环

    while len(stack) !=0:

# 从栈里取数据

        dirPath = stack.pop()

# 目录下所有文件

        filesList = os.listdir(dirPath)

# 处理每一个文件,如果是普通文件则打印出来,如果是普通文件则将该目录的地址亚栈

        for fileNamein filesList:

fileAbsPath = os.path.join(dirPath,fileName)

if os.path.isdir(fileAbsPath):

# 是目录就压栈

                stack.append(fileAbsPath)

print("目录:"+ fileName)

else:

# 打印普通文件

                print("普通:" + fileName)

getAllDirDe(r"E:\python\PycharmProjects\python基础学习\day05")

执行结果如下:

用栈模拟递归遍历目录(深度遍历)_第3张图片
dfs

你可能感兴趣的:(用栈模拟递归遍历目录(深度遍历))