列表(数组):
数组需要一块连续的内存空间来存储,对内存的要求比较高。
补充: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)
队列:遵循先进先出原则
队列的作用:应用解耦
队列持久化:如何保证队列中的数据不丢失?
-
在队列里,设置durable=true 代表队列持久化
-
在生产者端,设置
properties = pika.BasicProperties(
delivery_mode=2, # make message persistent
)
-
在消费者端
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