定义
-
定义:用顺序存储的方式实现线性表
-
顺序存储:把
逻辑上相邻的元素
存储在物理位置上也相邻
的存储单元中,元素之间的关系由存储单元的邻接关系来体现
静态分配
使用静态分配定义的顺序表,后续 表长不能表更
-
定义顺序表
#define MaxSize 10; // 定义线性表最大长度 typedef struct { ElemType data[MaxSize]; // 用静态的“数组”存放数据元素 int length; // 顺序表的当前长度 } SqList; // 顺序表的类型定义 ```
-
初始化顺序表
#include <stdio.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[0] = 0; // 将所有数据元素设置为默认初始值 0 } L.length = 0; } int main() { SqList L; // 声明一个顺序表 InitList(L); // 初始化顺序表 return 0; }
动态分配
-
定义顺序表
#define InitSize 10 // 顺序表的初始化长度 typedef struct{ ElemType *data; // 指示动态分配数组的指针 int MaxSize; // 顺序表的最大容量 int length; // 顺序表的当前长度 } SeqList;
-
初始化顺序表
#include <stdlib.h> #define InitSize 10 // 顺序表的初始化长度 typedef struct{ ElemType *data; // 指示动态分配数组的指针 int MaxSize; // 顺序表的最大容量 int length; // 顺序表的当前长度 } SeqList; void InitList(SeqList &L) { // 用 malloc 函数申请一片连续的存储空间 L.data = (int *)malloc(InitSize * sizeof(int)); // 先申请 10 个长度的空间 L.length = 0; L.MaxSize = InitSize; } // 增加动态数组的长度 void IncreaseSize(SeqList &L, int len) { int *P = L.data; // 顺序表 L 的数据赋值给 p L.data = (int *)malloc((L.MaxSize + len) * sizeof(int)); // 再申请 10 + 5 个长度的空间 for(int i = 0; i < L.length; i++) { L.data[i] = p[i]; // 将数据复制到新区域 } L.MaxSize = L.MaxSize + len; // 顺序表的最大长度增加 len free(p); 是否原来的内存空间 } int main() { SeqList L; // 声明一个顺序表 InitList(L); // 初始化顺序表 IncreaseSize(L, 5); return 0; }
顺序表的特点
- 随机访问,即可以在 O(1) 的时间内找到第 i 个元素
- 存储密度高,每个节点只存储数据元素
- 拓展容量不方便(采用动态分配的时间复杂度较高)
- 插入、删除操作不方便