1,堆栈结构

  • 后进先出的队列

  • 栈结构:其实就是一个后进先出的一个线性表,只能在栈顶压入或弹出元素

  • import queue.LifoQueue()
    q = queue.LifoQueue()
    q.put('first')
    q.put('second')
    q.put('third')
    
    print(q.get())
    print(q.get())
    print(q.get())
    
    结果
    third
    second
    first
  • 如何用列表实现栈

  • lis = []
    lis.append('a')   #压入元素‘a'
    lis.append('b')   #压入元素'b'
    lis = ['a','b']
    lis.pop()     #弹出元素'b'
    lis.pop()     #弹出元素'a'
    ###################################
    >>> x=[]            #创建一个空列表,此处表示栈
    >>> x
    []
    >>> x.append('a')   #压入元素'a'
    >>> x
    ['a']
    >>> x.append('b')   #压入元素'b'
    >>> x
    ['a', 'b']
    >>> x.pop()         #弹出栈顶元素'b'
    'b'
    >>> x
    ['a']
    >>> x.pop()         #弹出栈顶元素'a'
    'a'
    >>> x
    []
    >>> x.pop()         #试图对一个空栈做弹出操作,会报异常
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: pop from empty list
    

2,队列

队列,类似于栈

  • 队列,其实就是一个先进先出的线性表,只能在队首执行删除操作,在队尾执行插入操作,用列表表示队列,可以用append()方法实现队尾插入元素,用pop(0)方法实现在队首删除元素

  • >>> x=[]
    >>> x.append('a')
    >>> x
    ['a']
    >>> x.append('b')
    >>> x
    ['a', 'b']
    >>> x.pop(0)
    'a'
    >>> x.pop(0)
    'b'
    >>> x.pop(0)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: pop from empty list

3,优先级队列

  • q = queue.PriorityQueue()

  • put进入一个元组,元组的第一个元素是优先级,通常是数字,也可以是非数字之间的比较,数字越小,优先级越高,负数也可以

  • 如果两个值的优先级一样,那么按照后面的数据的ASCII码顺序来排序

  • q = queue.PriorityQueue()
    q.put((1, "david"))
    q.put((3, "world"))
    q.put((2, "hello"))
    
    print(q.get())
    print(q.get())
    print(q.get())
    ########################
    (1, 'david')
    (2, 'hello')
    (3, 'world')
    
  • 这三种队列都是安全的,不会出现多个线程抢占同一个资源的情况

02-12 12:31