一、 栈与队列

关注公众号“轻松学编程”了解更多。

1、 栈 stack

特点:先进先出[可以抽象成竹筒中的豆子,先进去的后出来] 后来者居上

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

特点: 先进先出[可以抽象成一个平放的水管]

#导入数据结构的集合
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、 栈模拟递归遍历目录

也称为深度遍历

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、 队列模拟递归遍历目录

也被称为广度遍历

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())

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

最新文章

  1. nginx之location匹配优先级和安全问题
  2. Java设计模式之单例
  3. iOS autolayout 代码,自定义间距
  4. 使用pl/sql監控PROCEDURE執行時間
  5. 为什么我们可以使用while(~scanf("%d"))读到文件末尾
  6. Setup Factory 打包.netframework 2.0
  7. SQLServer 2008以上误操作数据库恢复方法——日志尾部备份(转)
  8. SGU 172.eXam(二分图染色)
  9. 5分种让你了解javascript异步编程的前世今生,从onclick到await/async
  10. Scala中柯里化函数
  11. comtypes加word 2013批量将pdf转换为doc
  12. iOS监听模式系列之iOS开发证书、秘钥
  13. Javascript高级编程学习笔记(95)—— WebGL(1) 类型化数组
  14. python vs vscode问题汇总
  15. vue中父组件给子组件额外添加参数
  16. laravel表单验证
  17. 11-15 dom 动态创建节点
  18. Razor - 标记简述
  19. 解决使用Properties读取中文乱码问题
  20. Delphi基础语法

热门文章

  1. NoActionBar主题下如何添加OptionsMenu
  2. Go gin框架 使用swagger生成API文档
  3. 手把手教你ASP.NET Core:使用Entity Framework Core进行增删改查
  4. Harmony OS 开发避坑指南——DevEco Device Tool 安装配置
  5. vue项目的elementui的form表单label的对齐方式和 el-date-picker 的长度设置
  6. c#类(class)
  7. 【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数
  8. IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理
  9. XML流操作
  10. 多测师讲解jmeter _图片详解_(全)高级讲师肖sir