python中的队列和栈_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()    清空队列

参考:

(三)队列

# 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())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值