顺序表实现动态分配
#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;//初始长度为0 L.maxsize=10; //赋初始值 for(int i=0;i<L.maxsize;i++) { L.data[i]=i; } } //增加动态数组的长度 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 main() { SeqList L; InitList(L); IncreaseSize(L,5); return 0; }
malloc()申请空间除了申请指定内存空间外,还在指针头部以前增加存放额外空间用于存放申请空间大小信息
free()销毁内存传入malloc申请空间的首地址,除传入malloc申请的空间外,还额外传入指针头部以前的值用于辨别需要销毁空间的大小,该指针头也被销毁。