概念:
- 相同点:线性表,存储数据。
- 插入操作都是限定在表的尾部
- 栈和队列的管理模式是相同的
- 都可以通过顺序结构和链式结构实现
- 不同点:
- 栈:【Stack】只能在表的一端进行插入或删除操作的限定表,即在表尾进行操作,用于表达式的转换和求和,函数的递归和调用【函数入栈和出栈】;
- 队列:【Queue】只能在表的一端进行插入,在表的另一端进行删除的线性表,即在表尾插入,在表头删除,用于计算机中各种资源的管理
特点:
- 栈:先进后出,后进先出【可以抽象为一个头向上的容器,举例:羽毛球筒】
myStack = [] #压栈或者入栈【向栈中插入数据】:append myStack.append(10) print(myStack) #[10] myStack.append(20) print(myStack) #[10,20] myStack.append(30) print(myStack) #[10,20,30] myStack.append(40) print(myStack) #[10,20,30,40] #出栈【从栈中取出数据,删除操作】:pop myStack.pop() print(myStack) #[10, 20, 30] myStack.pop() print(myStack) #[10, 20] myStack.pop() print(myStack) #[10] myStack.pop() print(myStack) #[]
- 队列:先进先出【可以抽象成一个水平放置的水管】
import collections #创建列表 queue = collections.deque([10,20]) print(queue) #deque([10,20]) #入队【添加数据】:append,在表尾操作 queue.append(30) print(queue) #deque([10, 20, 30]) queue.append(40) print(queue) #deque([10, 20, 30, 40]) queue.append(50) print(queue) #deque([10, 20, 30, 40, 50]) #出队【删除数据】:popleft,在表头操作 queue.popleft() print(queue) #deque([20,30, 40, 50]) queue.popleft() print(queue) #deque([30, 40, 50]) queue.popleft() print(queue) #deque([40, 50])
运用栈模拟递归遍历目录【深度遍历】import os #运用栈模拟递归遍历目录【深度遍历】 #思路:将路径添加到栈中,然后又从栈中取出路径,判断,如果是目录,则再次添加到栈中 def getAll(path): #定义一个空栈 stack = [] #将初始指定路径添加到栈中 stack.append(path) while len(stack) != 0: #从栈中取出路径 dirPath = stack.pop() #获取该目录下所有的内容【文件夹和文件】 fileList = os.listdir(dirPath) #遍历 for fileName in fileList: #拼接路径 filePath = os.path.join(dirPath,fileName) #判断是否是目录 if os.path.isfile(filePath): print("目录:",fileName) #如果是目录,则将目录添加到栈中 stack.append(filePath) else: print("文件:",fileName) getAll(r"E:\Python学习\1py基础\Day10")
运用队列模拟递归遍历目录【广度遍历】
#运用队列模拟递归遍历目录【广度遍历】 import os import collections def getAll1(path): #创建一个空的队列 queue = collections.deque() #进队 queue.append(path) while len(queue) != 0: #从队列中取出路径 dirPath = queue.popleft() #获取该目录下所有的内容【文件夹和文件】 fileList = os.listdir(dirPath) #遍历 for fileName in fileList: #拼接路径 filePath = os.path.join(dirPath,fileName) #判断是否是目录 if os.path.isfile(filePath): print("目录:",fileName) #如果是目录,则将目录添加到队列中 queue.append(filePath) else: print("文件:",fileName) getAll1(r"E:\Python学习\1py基础\Day10")