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

    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    c++中ctype常用函数总结(isprint isblank..)
    c++的const总结(转)
    c++重载输入输出运算符
    c++中的友元重载
    c++函数模板二栈实现
    c++函数模板1
    c++中IO输入输出流总结<二>
    c++中IO输入输出流总结<一>
    四层与七层得区别(转)
    ORACLE操作
  • 原文地址:https://www.cnblogs.com/daviddd/p/12034442.html
Copyright © 2011-2022 走看看