线性表 :顺序存储来实现线性表
链表 :链式存储实现线性表
顺序存储 :存放在一段连续物理存储单元 ,数据元素之间的逻辑关系由物理存储关系体现
链式存储 :存储在任意的一组物理存储单元 ,数据元素之间的逻辑关系用指针来表示

静态顺序表 :且大小固定(无法扩容 )的数组
动态顺序表 :可以自动调节大小(可扩容)的数组
1、静态顺序表
c
// typedef是为了方便类型替换
typedef int SqDataType;
// 顺序表的最大存储的数据个数
#define Sq_MAX_SIZE 10
// 静态顺序表结构定义
//typedef struct SequenceList {
// SqDataType arr[Sq_MAX_SIZE]; //存储数据的静态数组
// int size; //记录顺序表中已经存入的数据个数
//}SqLinst;
// 也可以直接定义匿名结构体,再 typedef 一个名称,如下:
typedef struct {
SqDataType arr[Sq_MAX_SIZE];
int size;
}SqLinst;
(1)代码详解:
c
typedef int SqDataType;
- typedef 原类型名 新类型名(别名);
- 原类型名:
int - 新类型名(别名):
SqDataType
- 原类型名:
(2)代码详解:
c
#define Sq_MAX_SIZE 10
#define宏定义:在程序编译前,会把代码中所有出现的 Sq_MAX_SIZE 替换成 10
注意:尾部没有任何符号
(3)代码详解:
c
typedef struct {
SqDataType arr[Sq_MAX_SIZE]; //存储数据的静态数组
int size; //记录顺序表中已经存入的数据个数
}SqLinst;
- struct:结构体类型。将几个不同类型、属于同一个整体的变量打包放到一起,创造一个组合出来的新类型
- typedef struct:就是我们自己造出来的新类型,就像 int、char 一样,只不过是我们自己定义的。
- typedef 【原来的类型】 【新别名】;
- 套进现在的代码:
- 【原来的类型】:
struct { SqDataType arr[Sq_MAX_SIZE]; int size; }(一整个匿名结构体) - 【新别名】:
SqLinst
- 【原来的类型】:
- 相当于告诉编译器:以后我写
SqLinst,就等同于写上面那一大串匿名结构体。

2、动态顺序表
c
// 动态顺序表
// typedef是为了方便类型替换
typedef int SqDataType;
// 动态顺序表结构定义
//typedef struct SequenceList {
// SqDataType* arr; //存储数据的动态数组
// int size; //记录顺序表中已经存入的数据个数
// int capacity; //动态数组的容量空间的大小
//}SqLinst;
// 也可以直接定义匿名结构体,再 typedef 一个名称,如下:
typedef struct {
SqDataType* arr; //存储数据的动态数组
int size; //记录顺序表中已经存入的数据个数
int capacity; //动态数组的容量空间的大小
}SqLinst;
