四种常用的数据结构
列表list
一个队列,一个排列整齐的列。
列表内的个体叫做元素,列表由若干元素组成,列表中的元素在内存中是连续排放的。
元素可以是任意对象(数字、字符串、列表等),列表是个容器。a1 = [1, ‘ab’, True, 3.5, [1, ‘az’, False], int]
列表内元素是有顺序的,一个挨一个的空间结构排好的连续编址的,可以用索引。
线性的数据结构,在内存中将内存进行线性编址,列表开辟的是连续的空间结构,必须是连续的。
使用[]表示。
列表是可变的,内部是可以变得增加或减少。
列表特点:有序的,检索速度很快,不便于增删数据的挪动(末尾增删除外),列表本身是有序的所以在它当中经行操作他之后的队列都要进行改变。列表比较适合去读取数据
链表
链表特点:检索速度慢,便于增删。链表内部的元素都是前一个元素记住下一个元素的地址,所以检索时都需要从前到后一个一个查找,但是在增删时只需要将前后两个元素之间所记录的地址进行更改就可以了,元素在内存中是零散的放的,双向链表记录着前后的数据地址。
stack
栈是限定在表尾经行插入或者删除的线性表,栈是一种数据结构,按照先进后出,后进先出的原则存储数据的,中间不允许插队与移出队伍。摆放一摞盘子最下面的是最后用到的而放在最上面的是第一个用到的。
queue
队列是一种特殊的线性表,先进先出的数据结构,中间不允许插队与移出队伍。只能在表的前端经行删除,后端进行插入。
它们都是有序的,前一个可以找到后一个。
列表附加
索引:分为正索引与负索引,0与正号的称为正索引,出现负号的称为负索引。0是列表内的第一个元素,正方向上他的最大索引值等于他的长度减一,-1是最后一个元素、-2是倒数第二个元素,使用索引是列表的最快访问方式,效率最高。一旦出现IndexError说明他的边界出问题了。
赋值:a2=list(range(1,10)) a2[-1]=a2[-1] + 10#就是对a2的最后一位进行更改替换,元素总数还是9个没有改变。
index:通过值value,从区间查找列表内的元素是否匹配,匹配到第一个立即返回,匹配不到抛异,时间复杂度类型O(n)。In:a2.index(19) Out:8
count:返回列表中匹配value的次数,匹配不到抛异常,时间复杂度类型O(n)。In:a3 = [1, 1, 8] In:a3.count(1) Out:2
append:尾部追加元素,返回None,返回None意味着没有产生新的列表,就地修改,时间复杂度O(1)。
insert:在指定的索引处插入元素,返回None,时间复杂度O(n),超出上边界尾部追加,超出下边界首部追加。
extend:尾部扩展,一次可以追加多项,返回None,就地修改。
+:尾部追加,生成一个新列表,原列表没有发生改变。不同类型之间不使用加号,会报错,耗内存耗时间,他生成的是新列表。a4 = a2 + a3
*:重复操作,将列表元素重复n次,返回新列表。注意这里只是浅拷贝。
remove:从左到右查找第一个匹配的值,移除该元素,返回None。
pop:不指定索引,就从列表尾部弹出一个元素,指定索引,就从索引处弹出一个元素。
clear:清除列表所有元素,只剩空列表。