DS-1-顺序表的静态分配与动态分配的实现
所谓顺序表即以顺序存储的方式实现线性表
以下为静态分配实现
#include <stdio.h> #define MaxSize 10 //最大长度 typedef struct{ int data[MaxSize]; int length; //当前长度 }SqList; //顺序表静态定义 void InitList(SqList &L){ for(int i = 0; i < MaxSize; i++) //设置默认值可省略 L.data[i] = 0; L.length = 0; //length默认值不可省略 } int main(){ SqList L; InitList(L); return 0; }
以下为动态分配实现
#include <stdlib.h> #define InitSize 10 //默认最大长度 typedef struct{ int *data; int MaxSize; //最大容量 int length; //当前长度 }SeqList; void InitList(SeqList &L){ L.data = (int *)malloc(InitSize*sizeof(int)); L.length = 0; L.MaxSize = InitSize; } //增加动态数组的长度 void IncreaseSize(SeqList &L, int len){ int *p = L.data; L.data = (int *)malloc(sizeof(int)*(L.MaxSize + len)); for(int i = 0; i < L.length; i++){ L.data[i] = p[i]; //将数据复制到新区域 } L.MaxSize = L.MaxSize + len; free(p); //释放原有空间 } int mian(){ SeqList L; InitList(L); IncreaseSize(L,5); return 0; } //虽然实现了动态分配,但需要将原数据复制到新区域,时间开销较大