Python之栈和队列的应用

概念:

  • 相同点:线性表,存储数据。
  1. 插入操作都是限定在表的尾部
  2. 栈和队列的管理模式是相同的
  3. 都可以通过顺序结构和链式结构实现
  • 不同点:
  1. 栈:【Stack】只能在表的一端进行插入或删除操作的限定表,即在表尾进行操作,用于表达式的转换和求和,函数的递归和调用【函数入栈和出栈】;
  2. 队列:【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")

 

 

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值