-
存储/物理结构
-
顺序表(顺序存储)
-
定义(如何用代码实现)
顺序表——用顺序存储的方式实现线性表顺序存储。
把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。
-
-
如何知道一个数据元素大小?
-
C语言 sizeof(ElemType)
sizeof(int) = 4B
typedef struct{ int num; //号数 int people; //人数 }Customer;
sizeof(Customer) = 8B
-
基本操作的实现
-
静态分配
#define MaxSize 10 //定义最大长度 typedef struct{ ElemType data[MaxSize]; //用静态的“数组”存放数据元素 int length; //顺序表的当前长度 }SqList; //顺序表的类型定义(静态分配方式)Sq:sequence ——顺序,序列
#include <studio.h> #define MaxSize 10 //定义最大长度 typedef struct{ ElemType data[MaxSize]; //用静态的“数组”存放数据元素 int length; //顺序表的当前长度 }SqList; //顺序表的类型定义 //基本操作——初始化一个顺序表 void InitList(SqList &L){ ② for(int i = 0;i < MaxSize;i++){ L.data[i] = 0; //将所有数据元素设置为默认初始值 ③ L.length = 0; //顺序表初始长度为0 } } int main(){ ① SqList L; //声明一个顺序表 InitList(L); //初始化顺序表 //...未完待续,后续操作 return 0; }
❔如果不给data数组设置默认初始值,会发生什么情况?
#include <studio.h> #define MaxSize 10 //定义最大长度 typedef struct{ ElemType data[MaxSize]; //用静态的“数组”存放数据元素 int length; //顺序表的当前长度 }SqList; //顺序表的类型定义 //基本操作——初始化一个顺序表 void InitList(SqList &L){ ③ L.length = 0; //顺序表初始长度为0 } int main(){ ① SqList L; //声明一个顺序表 InitList(L); //初始化顺序表 //尝试“违规”打印整个data数组 for(int i = 0; i < MaxSize; i++) printf("data[%d] = %d\\n",i,L.data[i]); return 0; }
-
内存中会有遗留的“脏数据”
❔如果“数组”存满了怎么办?
· 可以放弃治疗,顺序表的表厂刚开始确定后就无法更改(存储空间是静态的)
-
-
动态分配
#define InitSize 10 //顺序表的初始长度 typedef struct{ ElemType * data; //指示动态分配数组的指针 int MaxSize; //顺序表的最大容量 int length; //顺序表的当前长度 }SeqList; //顺序表的类型定义(动态分配方式)
💡 Key: 动态申请和释放内存空间
C —— ma