顺序表 单链表
存储空间分配 静态分配 动态分配
存取方式 随机存取 顺序存取
查找 O(1) O(n)
插入/删除 O(n) 天晴 O(1)
二叉查找树(BST)
平均复杂度 最坏情况复杂度
插入操作 O(logN) O(N)
查询操作 O(logN) O(N)
删除操作 O(logN) O(N)
注意:插入和删除都分为叶子结点和非叶子结点删除
最坏情况退化成这种有序序列
AVL树 插入删除查找 效率都是O(logN)
堆
最好最坏排序效率都是 nlogn
顺序表是用一段地址连续的存储单元一次存储线性表的数据元素。顺序表是用一堆数组来实现的,即通过下标访问。定义的时候是一次申请N个连续的空间,不管最后存放的数据是多少,都占用计算机内存的N个单位。所以定义的时候要注意线性表的数组空间长度。顺序表的空间分配方式属于静态分配(一次性分配所需要的内存开间)。由于顺序表的特性,所以在每一次插入和删除中都会移动近一半的结点 插入删除时间复杂度O(n)。如果当每个结点的信息数据很大的时候就会花费很多的时间。但是当需要查找数据时顺序表就会因随机存储结构而对表中的任意结点都可在O(1)(按照下标查找)时间内直接取得。
按照值查找,顺序查找是O(n),二分查找O(log2n)
总结: n^2 nlogn n logn
单链表是顺序存储结构,所以当要查找某一结点时需要扫描整个链表。平均时间性能为O(n)。单链表的优点在于动态分配内存空间。用户需要多少空间就申请多少空间。当单链表在链表上任意位置进行插入或者删除操作时只需要修改指针就可以了。
————-——------------------------------------------
数组在内存中是按顺序存放的,可以通过下标直接定位到某一个元素,这是随机存到
链表在内存中不是按顺序存放的,而是通过指针连在一起,为了访问某一元素,必须从链头开始顺着指针才能找到某一个元素,是顺序存取
顺序存取:就是存取第N个数据时,必须先访问前(N-1)个数据 (list)
随机存取:就是存取第N个数据时,不需要访问前(N-1)个数据,直接就可以对第N个数据操作 (array)
磁带机是顺序存储,就是数据只能按照顺序摆放, 显然磁带机是不会倒转的,即使可以倒转也无法定位存储地址。
硬盘是随即存储,他的磁头可以任意在磁道上寻找位置,随便存储在哪个地址都可以。