1 线性表
线性表是 n 个具有相同特性的数据元素的有限序列,是一种在实际中广泛应用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串等。
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
2 顺序表的分类
2.1 顺序表与数组的区别
顺序表是线性表的一种,顺序表的特性是:逻辑结构连续,物理结构也是连续的。顺序表的最底层结构是数组,但顺序表在数组的基础上实现了对数组的封装及增删查改等接口。我们可以把数组看成路边小摊,而顺序表就是米其林餐厅,二者虽然结构类似,但发挥的功能却不一样,档次也就自然有所差别。
2.2 静态顺序表
静态顺序表也就表示顺序表存储空间是提前给定的,无法改变。即使用定长数组来进行数据的存储。如下:
struct SeqList//用结构体来完成顺序表的操作 {
int arr[100];//定长数组
int size;//顺序表中有效的数据个数
};
如果使用静态顺序表就要面临两个严峻的问题:
一、数组空间开辟小了,空间不够用
二、数组空间开辟大了,空间浪费
基于这种情况我们选择使用动态内存开辟,即使用动态顺序表。
2.3 动态顺序表
动态顺序表需要使用到动态内存开辟,所以在结构体内我们对数组要使用指针进行定义,同时需要增加一个申请的空间大小的变量 capacity。
struct SeqList//定义结构体 {
int* arr;//定义数组
int size;//顺序表中有效的数据个数
int capacity;//空间大小
};
当代码量非常庞大,我们若想将部分 int 类型替换为 char 类型时,使用上面的定义方式就会引来麻烦。所以在这里我们将涉及到顺序表的 int 类型重命名一下,如此一来就方便了我们去对源程序进行查找替换等操作。(同时我们也可以对结构体类型进行重命名)
typedef int SLDataType;
typedef struct SeqList//定义结构体 {
SLDataType* arr;//定义数组
int size;//顺序表中有效的数据个数
int capacity;//空间大小
}SL;
3 顺序表的初始化、打印与销毁
在结构体中,为了使每部分功能都独立存在,我们只是对顺序表中的内容进行了定义,而并未进行初始化。故此时我们定义一个初始化函数来完成这部分功能。


