#include<stdio.h> //输入输出需要的头文件
#include<stdlib.h> //mallc函数和free函数需要的头文件
#define InitSize 10 //定义顺序表的初始长度
typedef struct
{
int* data; //动态分配数组的指针
int MaxSize; //顺序表的最大容量
int length; //顺序表的当前长度
}SqList; //创建顺序表
void InitList(SqList &L) //初始化顺序表的函数
{
L.data=(int *)malloc(InitSize*sizeof(int)); //申请数组空间并指向指针
for(int i=0;i<InitSize;i++)
{
L.data[i]=0;
} //防止脏数据,为数组设置默认初始值
L.length=0;
L.MaxSize=InitSize; //当前顺序表最大长度就是默认长度
}
void InsertList(SqList &L,int len) //增加动态数组的长度的函数
{
int* p; //定义一个指针p指向原数组
p=L.data;
L.data=(int *)malloc((InitSize+len)*sizeof(int)); //原数组重新开辟增加长度后的数组的空间
for(int i=0;i<InitSize;i++)
{
L.data[i]=p[i]; //把原来的数据复制给重新开辟的数组的空间
}
L.MaxSize=L.MaxSize+len; //顺序表的最大长度变为扩大后的长度
free(p); //free函数把原储存空间给释放掉,p是局部变量,当函数执行结束后,该内存空间会被系统自动回收
}
int main()
{
SqList L; //声明一个顺序表
InitList(L); //初始化顺序表
InsertList(L,5); //向顺序表增加长度
for(int i=0;i<L.MaxSize;i++)
{
printf("data[%d]=%d\n",i,L.data[i]);
}
return 0;
}