python的队列和栈
(一)队列和栈的区别
1、队列:
队列是一种特殊的线性表。其两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front)。
先进先出(First In First Out),FIFO
2、栈:
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。
后进先出(Last In First Out),LIFO
3、其他:
队列是线程间最常用的交换数据的形式。
在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性。
(二)队列和栈的方法小结
Queue.Queue(maxsize=0) 创建队列,FIFO, 如果maxsize小于1就表示队列长度无限。
Queue.LifoQueue(maxsize=0) 创建栈,LIFO, 如果maxsize小于1就表示队列长度无限。
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.get([block[, timeout]]) 出队,读队列,timeout等待时间。非阻塞get_nowait(),相当于get(block=False)
Queue.put(item, [block[, timeout]]) 入队,写队列,timeout等待时间。非阻塞put_nowait(),相当于put("xxx",block=False)
Queue.queue.clear() 清空队列
参考:
https://www.cnblogs.com/wt11/p/5952500.html
(三)队列
# from multiprocessing import Queue
from queue import Queue # 创建一个长度为5的队列
q = Queue(5) # 判队空
print(q.empty())
# 入队:向队列中添加元素
q.put(1)
q.put("abc")
q.put([1, 2, 3])
q.put({"a": 123})
q.put((1, 2))
# 判队满
print(q.full())
# 量队
print(q.qsize()) # 出队:从队列中取出元素
print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())
# 判断队空
print(q.empty())
# 量队
print(q.qsize())
# 非阻塞入队
q.put_nowait(6)
# 非阻塞出队
print(q.get_nowait())
(四)栈
from queue import LifoQueue # 定义一个5长度的栈
s = LifoQueue(5)
# 进栈:向栈中添加元素
s.put(1)
s.put(2)
s.put(3)
s.put(4)
s.put(5)
# 判栈满
print(s.full())
# 量栈
print(s.qsize()) # 退栈:从栈中取出元素
print(s.get())
print(s.get())
print(s.get())
print(s.get())
print(s.get()) # 判栈空
print(s.empty())
# 量栈
print(s.qsize())
python的队列和栈的更多相关文章
- python优先队列,队列和栈
打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) ...
- python之单例模式、栈、队列和有序字典
一.单例模式 import time import threading class Singleton(object): lock = threading.RLock() # 定义一把锁 __inst ...
- python数据结构-数组/列表/栈/队列及实现
首先 我们要分清楚一些概念和他们之间的关系 数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack) li ...
- 用两个栈实现队列与用两个队列实现栈(Python实现)
用两个栈实现队列: class QueueWithTwoStacks(object): def __init__(self): self._stack1 = [] self._stack2 = [] ...
- 编程题目: 两个队列实现栈(Python)
感觉两个队列实现栈 比 两个栈实现队列 麻烦 1.栈为空:当两个队列都为空的时候,栈为空 2.入栈操作:当队列2为空的时候,将元素入队到队列1:当队列1位空的时候,将元素入队到队列2: 如果队列1 和 ...
- 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)
目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...
- LeetCode 225:用队列实现栈 Implement Stack using Queues
题目: 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 Implement th ...
- 面试之leetcode20堆栈-字符串括号匹配,队列实现栈
1 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认 ...
- day-25-类的继承顺序-父类对子类的约束-多态-队列和栈
一.类的继承顺序 只要继承object类就是新式类 不继承object类的都是经典类 在python3 中所有的类都继承object类,都是新式类 在python2 中不继承object的类都是经典类 ...
随机推荐
- 记录一次在安装双系统的过程(先有debian, 后加windows 8.1)
突破的难题: 如何在一整个根目录的分区中切出来一半用于安装windows8.1呢? 当初安装debian系统时, 由于脑残,直接把整个500G的硬盘分给了根目录 / ,所以整个磁盘就TMD的一个主 ...
- Python内置类型——dict
Python中, 字典是容器,所以可以使用len()方法统计字典中的键值对的个数: 字典是可迭代的,迭代的依据是字典中的键. in, not in 等运算符判断指定的键是否在字典中: 如果索引一个字典 ...
- Python实现无向图最短路径
一心想学习算法,很少去真正静下心来去研究,前几天趁着周末去了解了最短路径的资料,用python写了一个最短路径算法.算法是基于带权无向图去寻找两个点之间的最短路径,数据存储用邻接矩阵记录.首先画出一幅 ...
- 求教如何在win7 X64系统上安装.net 3.5 sp1
其实win7系统已自带net 3.5.1了.开始菜单——控制面板——程序——打开或关闭windows功能,找到Microsoft .NET Framework 3.5.1,去掉选项,确定.然后再进入“ ...
- Unity Remote远程调试
http://www.cnblogs.com/qinghuaideren/p/3623368.html http://blog.csdn.net/u012741077/article/details/ ...
- bootstrap-select 多选下拉框使用教程
http://silviomoreto.github.io/bootstrap-select/ 一.使用bootstrap-select组件时,先引用下列文件 最后一个文件 defaults-zh_C ...
- memcpy in place 数组内拷贝
首先看一段代码 #include <stdio.h> #include <pthread.h> int main(){ ]; ; ; i++) { t1[i] = i; pri ...
- 一篇文章带你看懂Cloudflare信息泄露事件
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/753847001488039974 来源:腾云阁 ...
- android rom开发
How to Build Android ROMs on Ubuntu 16.04https://www.digitalocean.com/community/tutorials/how-to-bui ...
- go 的文件处理
准备一个文件 imooc.txt hello world! 一.使用 io/ioutil 包 定义一个 check 函数 func check(err error) { if err != nil { ...