LEMON

记录站

0%

Python栈与队列(十一)

Python栈与队列

一、栈

栈的特点:先进后出,后进先出;总结:先存的数据最后出栈,后存的数据最先出栈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 模拟栈结构
stack = []

# 压栈(向栈里存数据)
stack.append("A")
print(f"stack = {stack}") # stack = ['A']

stack.append("B")
print(f"stack = {stack}") # stack = ['A', 'B']

stack.append("C")
print(f"stack = {stack}") # stack = ['A', 'B', 'C']


# 出栈(在栈里取数据)
res1 = stack.pop()
print(f"res1 = {res1}") # res1 = C

res2 = stack.pop()
print(f"res2 = {res2}") # res2 = B

res3 = stack.pop()
print(f"res3 = {res3}") # res3 = A

print(f"stack = {stack}") # stack = []

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import os
def getAllDirDE(path):
# 创建空栈
stack = []
# 压栈
stack.append(path)
# 处理栈,当栈为空时结束循环
while len(stack) != 0:
# 从栈里取出数据
dirPath = stack.pop()
# 验证是否为绝对路径
# print(dirPath)
# 目录下所有文件
dirList = os.listdir(dirPath)
# 将这个file目录下的文件、目录打印出来
# print(dirList)
# for处理每一个文件,如果是普通文件就打印出来,如果是目录则将该目录的地址压栈
for fileName in dirList:
fileAbsPath = os.path.join(dirPath, fileName)
if os.path.isdir(fileAbsPath):
# 是目录就压栈
print("目录:" + fileName)
# 进队
stack.append(fileAbsPath)
else:
# 打印普通文件
print("文件:" + fileName)

getAllDirDE(r"D:\PyCharm\PyCharm 2018.3.7\file.py\文件处理\file")

二、队列

队列的特点:先进先出,后进后出;总结:先存的数据最先出列,后存的数据最后出列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 模拟队列的结构
import collections # 引导数据集合的模块


# deque() 创建队列
queue = collections.deque()
print(f"queue = {queue}", type(queue)) # queue = deque([]) <class 'collections.deque'>


# 进队(存数据)
queue.append("A")
print(f"queue = {queue}") # queue = deque(['A'])

queue.append("B")
print(f"queue = {queue}") # queue = deque(['A', 'B'])

queue.append("C")
print(f"queue = {queue}") # queue = deque(['A', 'B', 'C'])


# 出队(取数据)
rts1 = queue.popleft()
print(f"rts1 = {rts1}") # rts1 = A
print(f"queue = {queue}") # queue = deque(['B', 'C'])

rts2 = queue.popleft()
print(f"rts2 = {rts2}") # rts2 = B
print(f"queue = {queue}") # queue = deque(['C'])

rts3 = queue.popleft()
print(f"rts3 = {rts3}") # rts3 = C
print(f"queue = {queue}") # queue = deque([])

队列模拟递归遍历目录(广度遍历)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import os
import collections

def getAllDirQU(path):
queue = collections.deque()
# 进队
queue.append(path)

while len(queue) != 0:
# 出队数据
dirPath = queue.popleft()
# 找出所有的文件
filesList = os.listdir(dirPath)

for fileName in filesList:
# 绝对路径
fileAbsPath = os.path.join(dirPath, fileName)
# 判断是否为目录,是目录就进队,不是目录则打印

if os.path.isdir(fileAbsPath):
print("目录:" + fileName)
# 进队
queue.append(fileAbsPath)
else:
print("文件:" + fileName)


getAllDirQU(r"D:\PyCharm\PyCharm 2018.3.7\file.py\文件处理\file")
-------------本文结束感谢您的阅读-------------