1. 程式人生 > >列表,鏈表,隊列

列表,鏈表,隊列

init 實現 lis rec strong med mes pri n)

列表(數組):

  數組需要一塊連續的內存空間來存儲,對內存的要求比較高。

  補充: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 : 規則波

列表,鏈表,隊列