Python栈与队列实现及文件目录遍历详解

顾星河
顾星河
发布时间:2026-10-13| 4人浏览过
原创

本文详细解析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程序设计工作有所帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。