1.概念
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构(数据元素之间存在一对一的关系),一般情况下采用数组存储。在数组上完成数据的增删查改。
2.分类
2.1静态顺序表
静态顺序表是使用定长数组存储元素。
typedef int SLDataType;//顺序表数据类型
#define N 100
typedef struct SeqList
{
SLDataType a[100];//定长数组,记录数据
size_t num;//记录数组元素个数
}SeqList;//重命名要有意义的名字,SeqList就是顺序表的缩写。
缺点
但我们不知道要存储数据的数目时,要如何定义数组的长度?难道是申请足够多的空间(N=100000),但如果只存放10个数据,那不是有很多空间被浪费了吗?开多了浪费,开少了不够用。所以静态顺序表的实际应用少,多使用动态顺序表。
2.2动态顺序表
动态顺序表是使用动态开辟的数组存储的,是可以按需申请的。
typedef int SLDataType;//顺序表数据类型
typedef struct SeqList
{
SLDataType* a;//指向动态开辟的内存空间
size_t num;//记录数组元素个数
size_t capacity;//记录当前顺序表的最大容量,当不够是可以扩充
}SeqList;
3.动态顺序表的实现
3.1要求
- 我们用顺序表来存储整数。
- 创建一个模块(SeqList.h和SeqList.c)和一个测试模块(test.c),SeqList.h用来声明函数,SeqList.c用来实现函数。
- 顺序表包含增删查改的功能。
3.2准备
- 在头文件中声明函数以及创建顺序表。
为什么
因为在头文件中声明,在两个.c文件中包含该头文件,就可以使用头文件中的顺序表类型、声明的函数以及包含的头文件。
- 在测试模块调用函数。
3.3实现
-
初始化顺序表
-
销毁顺序表。
-
打印顺序表。
-
顺序表尾部插入数据。
-
顺序表前面插入数据
-
顺序表后面删除数据和前面删除数据
-
查找顺序表中元素
-
顺序表中间插入数据
注意
这里写错了,是将pos-1为下标对应数据往后移一位。 -
中间删除数据