顺序表的定义:
定义:用顺序存储的方式实现线性表。顺序存储是把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。
顺序表实现-静态分配:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #define MaxSize 10 typedef struct { int data[MaxSize]; int length; }SqList;
void InitList(SqList &L); int main(void) { SqList L; InitList(L); return 0; }
void InitList(SqList &L) { for (int i = 0; i < MaxSize; i++) { L.data[i] = 0; } L.length = 0; }
|
注意事项: (01)静态分配的方式中,需要对数据进行初始化,否则内存中可能存在遗留的脏数据 (02)静态分配的方式无法保证之后添加数据后的操作
顺序表实现-动态分配:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include<stdio.h> #include<stdlib.h> #define InitSize 10 typedef struct { int *data; int MaxSize; int length; } SqList; void InitList(SqList &L); void IncreaseSize(SqList &L, int len); int main(void) { SqList L; InitList(L); IncreaseSize(L, 5); return 0; }
void InitList(SqList &L) { L.data = (int *)malloc(InitSize*sizeof(int)); L.length = 0; L.MaxSize = InitSize; }
void IncreaseSize(SqList &L, int len) { int *p = L.data; L.data = (int *)malloc((L.MaxSize + len)*sizeof(int)); for (int i = 0; i < L.length; i++) { L.data[i] = p[i]; } L.MaxSize = L.MaxSize + len; free(p); }
|
顺序表的特点:
(1)随机访问,即可以在O(1)时间内找到第i个元素 (2)存储密度高,每个节点只存储数据元素 (3)扩展容量不方便(即便采用动态分配的方式实现,扩展长度的时间复杂度也比较高)