【Python数据结构相关】栈与队列在Python中

python 数据结构 —— 栈与队列


栈(Stack):后进先出,只能在一端操作

  1. 栈的操作:

    • Stack() 创建一个空的新栈
    • push() 将一个元素添加到栈的顶部
    • pop() 从栈中删除顶部项,并返回该元素
    • peek() 从栈返回顶部项,但不会删除,不修改栈
    • isEmpty() 测试栈是否为空,返回布尔值
    • size() 返回栈中的数量,返回整数
  2. python中目前我没找到内置的栈模块,不过可以使用队列模块的后进先出来实现

队列:默认为FIFO,也可以LIFO

在python中封装在queue模块中,该模块提供了同步的,线程安全的几个队列类,实现了锁原语,能够在多线程中直接使用。

  1. FIFO队列 Queue(maxsize = 0)
  2. LIFO队列 LifoQueue(maxsize = 0)
  3. 优先级队列 PriorityQueue(maxsize = 0)
  4. 简单FIFO队列 SimpleQueue
  • 注意:maxsize是一个整数,表示放入队列中项目数的上限,当达到这个大小的时候,插入操作将阻塞队列中的项目消费掉。默认为0,表示尺寸是无限大。优先级中最先取出的是最小值先被取出( 最小值条目是由 sorted(list(entries))[0] 返回的条目)。条目的典型模式是一个以下形式的元组: (priority_number, data)

常用方法

queue = Queue()

queue.qsize()       #返回队列大小
queue.empty()       #判断是否为空,返回布尔值
queue.full()        #判断是否为空,返回布尔值

'''
将item放入队列,后续默认参数保证在必要时阻塞至有空闲插槽可用
timeout > 0,将阻塞这么多秒;如果在这段时间内没有可用的空闲插槽,将引发Full异常
block = false时,如果空闲插槽立即可用,就把item放入队列,否则引发full异常(此时timeout被忽略)
'''
queue.put(item,block=True,timeout=None)

#相当于上述block = False
queue.put_nowait(item)  

'''
移除并返回一个项目
timeout > 0,阻塞此多秒,如果这段时间里没有得到item,引发empty异常
block = false ,如果一个项目立即可得到,则返回,否则引发empty异常(此时timeout被忽略)
'''
queue.get(block = True,timeout = None)

#相当于上述block = False
queue.get_nowait()

#在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。
#每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。
queue.task_done()

#实际上意味着等到队列为空,再执行别的操作
queue.join()
#异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值