数组&链表

数组

数组&链表
数组内连续的存储区域,有图只是示意,现实64位复杂的多,还有虚拟内存和寻址算法。(可以看计算机组成原理-操作系统)。你只要知道它的下标,查找只要一次操作就可以完成因此是O(1)的查找。
改变元素有插入和删除操作
数组&链表
插入D要移动EFG后面所有元素因此是O(n)时间复杂度
如果插入最后一个确实是O(1),第一个就是O(n),平均就是(n+1)/2因此就是O(n)时间复杂度,看平均的。
删除类似
数组&链表
后来有人想改善插入和删除,所以第二种数据结构链表应允而生。

链表

数组&链表
链表一般应用两种场合,一种插入和删除特别多。
第二种不知道有多少个元素如区块链
本质就是一个一个元素,有一个指针指向下一个节点。
下图单链表的变形,它用了两个指针,用next连接起来,同时用了一个头指针和一个尾指针,让你知道头尾在上面地方
数组&链表
下图示链表插入
数组&链表
链表删除
数组&链表
只需要两次操作,因此是O(1)的,但是要找第5个数要从头指针开始数5个因此是O(n)的。
因此要选择算法是动态平衡的过程,要更具实际情况选择。
双链表如下图既有前驱又有后续,因此查找时候方便一点,
数组&链表
数组&链表