python 数据结构 —— 栈与队列
栈(Stack):后进先出,只能在一端操作
-
栈的操作:
- Stack() 创建一个空的新栈
- push() 将一个元素添加到栈的顶部
- pop() 从栈中删除顶部项,并返回该元素
- peek() 从栈返回顶部项,但不会删除,不修改栈
- isEmpty() 测试栈是否为空,返回布尔值
- size() 返回栈中的数量,返回整数
-
python中目前我没找到内置的栈模块,不过可以使用队列模块的后进先出来实现
队列:默认为FIFO,也可以LIFO
在python中封装在queue模块中,该模块提供了同步的,线程安全的几个队列类,实现了锁原语,能够在多线程中直接使用。
- FIFO队列 Queue(maxsize = 0)
- LIFO队列 LifoQueue(maxsize = 0)
- 优先级队列 PriorityQueue(maxsize = 0)
- 简单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()
#异常
4245

被折叠的 条评论
为什么被折叠?



