数据结构有四个逻辑结构;集合(略过不考虑)线性结构,树形结构,图结构(网状结构)
有四种存储结构物理结构:顺序存储,链式存储,索引存储,散列存储(后三个非顺序存储)
顺序存储结构
首先单独介绍顺序存储结构:逻辑上相邻的数据元素上物理位置也相邻
顺序存储的两大实现方式:静态分配:使用静态数据实现,大小一旦确定无法更改。动态分配:使用动态数组实现(里面有指针 实际上是用指针新拓展一个新的数组) 需要复制时间复杂度高
线性结构
然后首先讲了线性结构包含的表有-顺序存储结构中的表-以及链式存储结构的表-:
线性表(逻辑结构),顺序表(顺序存储结构),单链表(链式存储),双向链表,循环链表,静态链表等
顺序表
顺序表特点:随机访问:能在O(1)的时间负责度上直接找到i个元素 存储的密度高(可以在里面存储到数据源本身以及指针) 拓展不方便(就算是动态存储也需要花费时间 已经部分空间) 虽然查找快,但是删除插入元素不方便需要 需要将一大片数据移动
顺序表的顺序存储方式:增加删除一样:
最好情况:时间复杂程度=O (1)
最坏情况:时间复杂程度=O(n)
平均情况:O(n)
顺序表的基本操作:
插入Listinsert(&l,i,e) 将元素e插入到L到第i个位置 插入位置的后面的元素都后移
删除ListDelete(&L,i&e)将L到第i个元素删除,并用e返回 删除位置的后面的元素都前移
查找:按位查找:
时间复杂度:O(1)因为顺序查找可以根据起始的地址和数据元素大小立即找到第i个元素
按值查找:O(n)
总结:
时间复杂程度可以用 常对幂指阶 (洛必达判断)
x次数循环的数量积就是时间复杂度 (找到最深层循环次数即可)
空间复杂度
x个变量和结构的数量积就是空间复杂度