zoukankan      html  css  js  c++  java
  • 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())
    

      

  • 相关阅读:
    hive实现根据用户分组,按用户记录求上下两条记录的时间差
    国外互联网公司大数据技术架构研究
    Hadoop源码解析之 rpc通信 client到server通信
    一致性哈希与java实现
    spark 对hbase 操作
    Spark MLlib(下)--机器学习库SparkMLlib实战
    PHP源码进行加密(仅linux)
    有个问题需要将字符串(大数字)计算相加并转换成字符串,传递的参数是字符串。
    Js中Array 函数使用方法
    phpstorm配置xdebug调试
  • 原文地址:https://www.cnblogs.com/andy9468/p/10401532.html
Copyright © 2011-2022 走看看