知识点速览
线性表: n 个具有相同特性的数据元素的有限序列。在逻辑上来说是线性结构,通常以数组、链表结构来存储(常见的线性表:顺序表、链表、栈、队列、字符串......)
**顺序表:**用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储,在数组上完成数据的增删查找(顺序表可以分类为:静态顺序表(定长数组存储)、动态顺序表(动态开辟的数组存储))
代码实现与讲解
上面我们知道顺序表有两种实现方式,一种是定长数组,另一种是动态开辟数组。
定义结构体
静态数组来存储数据,需要一个结构体,因为涉及到多个变量,比如当前存储的数据个数、最大空间、存储空间。
struct List {
int arr[10]; // 定长数组
int size; // 当前数据个数
int max; // 最大存储量
};
这样我们就定义了一个结构体,它的类型是 struct List。下面我们来创造结构体变量,有以下两种方式:直接创造、类型 + 名称这样创造。
这里我们有几点可以优化及注意的地方:
- 使用 typedef 来重新定义变量,例如这个结构体被 typedef 重新定义之后,它的类型就可以简写为 List。
typedef struct List {
int arr[10];
int size;
int max;
} List;
- 同样我们可以用 typedef 来定义变量类型、用宏定义常量,可以方便以后进行代码维护。
// 定义变量类型
typedef int Plastic;
// 宏定义常量
#define MAX 10
typedef struct List {
Plastic arr[MAX];
Plastic size;
Plastic max;
} List;
静态顺序表
我们已经定义完了结构体,下面我们来简单看看静态顺序表,这里因为静态顺序表与动态顺序表除了开辟类型不一样,其它大致相同,我们以动态顺序表为主要的讲述对象。
初始化
这里需要注意,我们改变的是结构体的成员,需要取地址,因为实参是形参的一份临时拷贝,取地址的话,函数就拿到的是结构体的地址,否则就是对结构体的一份拷贝,不会真正改变。
// 初始化
Preliminary(&Static);


