顺序表指的是使用顺序存储这一结构实现线性表。
顺序存储是把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中来,元素之间的关系由存储单元的邻接关系来体现。
分为静态分配和动态分配
C语言中得到一个数据元素大小的方式是sizeof(元素类型),比如sizeof(int)=4B。
实现静态分配的具体例子
首先,定义了一个顺序表,用静态数组来存放数据元素,然后定义了一个函数初始化顺序表,并在其中定义了此顺序表的初始长度为0,然后是主函数过程,这里不用把数组中的值都设置为0,因为现在也不需要读取,现在可读取的应该是当前数组大小范围内的值,而且顺序表的初始长度一定要设置为0,因为编译器可能不会将其置为0,从而影响后续操作。
当存储空间是静态时,当存储空间存满了就无法进行后续操作。
实现动态分配的过程,
①首先,定义这个顺序表,设置动态分配数组的指针,这里指针指向的是数组的第一个元素的地址,不是指向数组本身,然后定义顺序表的最大容量,都为整数类型的,定义顺序表的当前长度。
②定义初始化顺序表的函数,用mallon函数定义一片连续的存储空间,这个函数参数是初始化空间的大小,然后返回空间的首地址,并将首地址转换成int类型的,即和顺序表定义中的类型相同。
③主函数中,先声明一个顺序表,这时系统内存为指针变量,顺序表容量,长度变量分配三个空间,然后初始化顺序表,申请一片连续的空间,长度为10,指针指向这个空间的首位,最后往顺序表里插入元素,顺序表当前长度为10,然后调用函数,增加空间。
④增加动态数组长度的函数,定义指针变量,指向原来的地址首位,指向原来地址首位的指针开辟一个新的15的连续空间,然后再将原来空间的值传进来,再释放free原来大小为10的内存空间。
特点
1.能够随机访问线性表中的元素,因为可以由首地址计算任意元素的地址。
2.存储密度高,每个节点只存储数据元素。
3.扩展容量不方便,动态分配可以扩展容量,但是时间复杂度高,因为要复制原来空间中的元素。
4.插入和删除操作不方便。