一、什么是顺序表
就是将所有元素存储在一块连续的内存空间中
二、顺序表的分类
1、静态分配存储
typedef struct{
ElemType data[MaxSize]; //数组
int length; //数组长度
}StaticTable;
缺点:空间分配之后,就不可以改变空间的容量
2、动态分配存储
typedef struct{
ElemType * data; //指示动态分配数组的指针
int MaxSize; //顺序表的最大容量
int lenght; //顺序表的当前长度
}DynamicTable;
base:存储的是动态分配的数组的首地址
三、重点
在动态分配存储中,如果已经达到容量了,还想要存储元素,需要再次分配存储空间
//3、不使用realloc函数重新顺序表最大容量
void realloc_list(DynamicTable * list, int lenght){
DynamicTable * temp = list;
printf("addr1 = %d\n",&list->data[0]);
list->data = (ElemType *)malloc(sizeof(ElemType) * (list->MaxSize+lenght));
printf("addr1 = %d\n",&list->data[0]); //重新分配后,数组元素的首地址都发生了变化
for (int i = 0; i < list->lenght; i++)
{
list->data[i] = temp->data[i];
}
list->MaxSize = temp->MaxSize+lenght;
free(temp);
}
四、总结
1、理解静态分配和动态分配的实质
2、理解动态内粗分配的过程中数组的首地址的变化情况