主要实现功能:利用数组实现顺序表,并动态分配需要的内存空间;
主要包含以下函数:
定义顺序表结构体:pdata指向表内数据
typedef struct
{
/* data */
int *pdata;
int maxSize;
int lenth;
} LinerList;
初始化表(分配内存空间,设置表的最大size):
void initList(LinerList *L)
{
L->pdata = (int *)malloc(InitSize * sizeof(int));
L->maxSize = InitSize;
L->lenth = 0;
}
给表赋一些值,方便后续观察:
void initValue(LinerList *L)
{
L->lenth = L->maxSize;
for (int i = 0; i < L->lenth; i++){
L->pdata[i] = i;
}
}
打印表的内容:
void printList(LinerList *L){
for (int i = 0; i < L->lenth; i++){
printf("List的第%d项数据是:%d\n",i, L->pdata[i]);
}
}
重点:增加表的大小:主要思想是开辟一段新的空间,把指针指向新空间开头。
void increaseSize(LinerList *L, int lenth)
{
int *p = L->pdata;
L->pdata = (int *)malloc((L->maxSize + lenth) * sizeof(int));
for (int i = 0; i < L->lenth; i++){
L->pdata[i] = p[i];
}
free(p);
L->maxSize = L->maxSize + lenth;
}
main函数:
int main(void)
{
LinerList L;
initList(&L);
printList(&L);
printf(" pdata指向:%p\n L最大size是:%d\n L的长度是%d:\n ", L.pdata, L.maxSize, L.lenth);
initValue(&L);
printList(&L);
printf(" pdata指向:%p\n L最大size是:%d\n L的长度是%d:\n ", L.pdata, L.maxSize, L.lenth);
increaseSize(&L,5);
printList(&L);
printf(" pdata指向:%p\n L最大size是:%d\n L的长度是%d:\n ", L.pdata, L.maxSize, L.lenth);
return 0;
}
输出结果如下:
pdata指向:0000000000021400
L最大size是:10
L的长度是0:
List的第0项数据是:0
List的第1项数据是:1
List的第2项数据是:2
List的第3项数据是:3
List的第4项数据是:4
List的第5项数据是:5
List的第6项数据是:6
List的第7项数据是:7
List的第8项数据是:8
List的第9项数据是:9
pdata指向:0000000000021400
L最大size是:10
L的长度是10:
List的第0项数据是:0
List的第1项数据是:1
List的第2项数据是:2
List的第3项数据是:3
List的第4项数据是:4
List的第5项数据是:5
List的第6项数据是:6
List的第7项数据是:7
List的第8项数据是:8
List的第9项数据是:9
pdata指向:00000000000275E0
L最大size是:15
L的长度是10:
请按任意键继续. . .