列表,链表,队列

列表(数组):

  数组需要一块连续的内存空间来存储,对内存的要求比较高。

  补充:1个整型占4个字节,1个字节占8位,即1个整型占32位

  举例:nt li = 1,2,3,4,5,6(申请多大内存就使用多大)

  时间复杂度:

    查找:O(1)

      其实空间位置是放在数组名中的,

      例如:a[2] = 1000+2*4 = 1008---1011 这样查找的时间复杂度就为O(1)

    添加/删除:O(n),因为在添加或者删除数据时列表后面的数组依次改变了

  补充:为什么数组的下角标会从0开始,而不是从1开始呢?

      如果从1开始的话:例,a[2] = 1000+(3-1)*4 =1008---1011 这样则做进行了一次运算。影响效率。

链表:

  与数组不同的是,链表的存储并不需要连续的内存空间,通过指针就可以将零碎的 内存空间串联起来。

  举例:

    li = [1,2,3,'hello',0.7](li中存放起始位置,li[1]中放1和next(下一个节点的地址),0.7中放0.7和结束标志)

   单链表的实现:
  # class Hero(object):
  #     def __init__          (self,no=None,name=None,nickname=None,pNext=None):
  #         self.on = no
  #         self.name = name
  #         self.nickname = nickname
  #         self.pNext = pNext
  # 这种方式只能在后面添加  
  # def add(head,hero):
  #     head.pNext = hero
  # def showAll(head):
  #     while head.pNext!=None:
  #         head =head.pNext
  #         print(head.name)

 

  删除
  # def delHero(head,no):
  #     cur = head
  #     while cur.pNext != None:
  #         if cur.pNext.no == no:
  #             break
  #         cur = cur.pNext
  #         print(cur.no,cur.name)

队列:遵循先进先出原则

  队列的作用:应用解耦

  队列持久化:如何保证队列中的数据不丢失?

    1. 在队列里,设置durable=true  代表队列持久化

    2. 在生产者端,设置
      properties = pika.BasicProperties(
            delivery_mode=2,  # make message persistent
        )

    3. 在消费者端
      auto_ack = False
      ch.basic_ack(delivery_tag=method.delivery_tag)

  exchange模式:

    1.fanout : 广播

    2.direct : 组播

    3.topic  : 规则波

原文地址:https://www.cnblogs.com/yanhui1995/p/10763928.html