线性表(/inear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串.
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
1.概念和结构
概念:
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。
结构:
顺序表的底层结构是数组,顺序表是用数组来实现的
(顺序表 = 数组+增添数据+删除数据+修改数据+查询数据......)
分类:
静态顺序表和动态顺序表
静态顺序表
使用定长数组存储元素

缺点:空间给少了不够用,给多了造成空间浪费。
动态顺序表
底层数组的空间大小在不断变化
定义

初始化
注意:要使用传址调用

尾插法
在插入新元素时要考虑原数组的空间大小,注意不要跃界。
当空间不足时,就需要增加原数组的空间,此时就需要realloc函数帮助。
那么一次性加多少空间呢?
如果一次性加的过少,那么效率就会下降,加的过多就很容易造成浪费。所以,每次扩容时,使原空间加倍最好(我也不知道为啥,大佬研究的,跟概率学相关)
注意:扩容时最好新建tmp数组,如果直接在原数组扩容容易造成数据丢失。

时间复杂度:O(1);
头插法:
与尾插相似,注意判断空指针,以及检查空间是否不足。不一样的是,需要把每个数据后移一位。

时间复杂度:O(n);
尾删

时间复杂度:O(1);
头删

时间复杂度:O(n);
之间插入
注意判断空指针以及越界问题即可

时间复杂度:O(n);
之间位置删除:
注意判断空指针以及越界问题即可

时间复杂度:O(n);
查找:

销毁:
注意free后要初始化。
