zoukankan      html  css  js  c++  java
  • 栈与队列

    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')
      
      
    • 这三种队列都是安全的,不会出现多个线程抢占同一个资源的情况

    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    Get distinct count of rows in the DataSet
    单引号双引号的html转义符
    PETS Public English Test System
    Code 39 basics (39条形码原理)
    Index was outside the bounds of the array ,LocalReport.Render
    Thread was being aborted Errors
    Reportviewer Error: ASP.NET session has expired
    ReportDataSource 值不在预期的范围内
    .NET/FCL 2.0在Serialization方面的增强
    Perl像C一样强大,像awk、sed等脚本描述语言一样方便。
  • 原文地址:https://www.cnblogs.com/daviddd/p/12034442.html
Copyright © 2011-2022 走看看