Skip to content

算法基础学习

数据结构的存储方式

数据结果的存储方式只有两种:数组(顺序存储)和链表(链式存储)。属于底层存储的数据结构类型,其余的数据结构多是基于这两种进行延伸实现的

分析问题要有递归思想,自顶向下,从抽象到具体

数组特点:

  • 元素紧凑连续存储,可以随机访问:通过索引快速找到对应的元素,优点:相对节约存储空间
  • 如果要动态扩容存储数据,需要重新分配一块更大的空间,再把数据全部复制过去,时间复杂度为 O(N)
  • 对数组的 API 操作,比如插入或删除,需要迁移后面的所有元素数据保持连续存储,时间复杂度 O(N)

链表特点:

  • 元素不连续存储,靠指针指向下一个元素的位置,所以不存在数组中的动态扩容问题
  • 因为存储空间不连续,所以无法根据索引算出对应元素的地址,不能随机访问
  • 如果知道某一元素的前驱和后驱,操作指针即可删除该元素或者插入新元素,时间复杂度 O(1)
  • 由于每个元素必须存储指向前后元素位置的指针,会消耗更多的存储空间

数据结构的基本操作

对于任何数据结构的基本操作都是遍历 + 访问,简单的说就是:增删改查

各种数据结构的遍历 + 访问无非两种形式:线性的和非线性的

线性的:for/while 非线性的:递归

数组遍历框架:典型的线性迭代结构

typescript
function traverse(arr: any[]) {
	for(let i = 0; i < arr.length; i++) {
    ...// 访问arr[i]
  }
}

链表遍历框架:兼具迭代和递归结构

typescript
// 待补充ing

二叉树遍历框架:典型的非线性递归遍历结构

typescript
// 待补充ing

所谓框架,就是套路。不管增删改查,这些代码都是永远无法脱离的结构

参考学习资料