前端数据结构
数据从逻辑上 分为 线性表 和 非线性表 数据之间的关系是线性的: 链表、队列、栈、数组 数据之间的关系是非线性的: 树 堆 和 图
数组
用一组连续的内存空间,来存储一组具有相同类型的数据。 由于在内存中是连续存放的,通过下标来随机访问数据效率是非常高的,但是,由于连续性,我们进行 push、pop 操作都会大面积改变数据, 所以平均时间复杂度为 O(n)
链表
物理存储上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接顺序决定的。由于链表的存储空间不是连续的,使用链表添加或者删除一个数据,我们并不需要为了保持内存的连续性而对数据进行搬移,所以在链表中删除和添加数据都是非常高效的。而随机访问的效率很低,平均时间复杂度为 O(n)
对比
随机访问
O(1)
O(n)
增加删除
O(n)
O(1)
什么是时间复杂度:
常见的时间复杂度有:O(1),O(n),O(lgn),O(nlogn),O(n^2)
大 O 描述的是算法的运行时间和输入数据之间的关系
值得注意的是 O(n)复杂度并不代表这个算法就比 O(n^2)快,例如:T= 10000n+10000 ,T= 1n*n+0 这个例子中当 n 为 10 可以看到 O(n)反而快,但 n=10000 的时候 O(n^2)就远远慢于 O(n)了,所以时间复杂度又叫做渐进时间复杂度,描述的是 n 趋于无穷的情况。 ————————————————
查找 插入 删除
数组 o(n) o(1) o(n)
有序数组 o(lgn) o(n) o(n)
链表 o(n) o(1) o(n)
有序链表 o(n) o(n) o(n)
二叉树最坏 o(n) o(n) o(n)
二叉树一般 o(lgn) o(lgn) o(lgn)
平衡树 o(lgn) o(lgn) o(lgn)
哈希表 o(1) o(1) o(1)
————————————————
最后更新于
这有帮助吗?