创建顺序表(动态分配)

发布时间 2023-11-18 17:08:22作者: 沁鱼
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10//默认的最大长度

//定义结构体
typedef struct {
	int *data;	//指示动态分配的指针
	int MaxSize;	//顺序表的最大容量
	int length;	//顺序表的当前长度
} SqList;

//初始化顺序表
void InitList(SqList &L) {
	L.data = (int*)malloc(InitSize * sizeof(int));	//用malloc函数申请一片连续的储存空间
	L.length = 0;	//将顺序表的初始长度设置为0
	L.MaxSize = InitSize;	//顺序表的初始最大容量定为默认最大长度
}

//增加动态数组长度(增加长度为len)
void IncreaseSize(SqList &L, int len) {
	int* p = L.data;	//将data的指针值赋给p
	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;	//将顺序表的最大值增加len
	free(p);	//释放原来的内存空间
}
int main() {
	SqList L;
	InitList(L);	//调用初始化函数
	IncreaseSize(L, 8);	//调用增长函数,增加的长度为8
	return 0;
}