#include<stdlib.h>
#include<stdio.h>
#define InitSize 10 //默认的最大长度
typedef struct{
int *data; //指示动态分配数组的指针
int MaxSize; //顺序表的最大容量
int length; //顺序表的当前长度
}SeqList;
void InitList(SeqList &L){
//用 malloc 函数申请一片连续的储存空间
//强制类型转换成定义的同类型的指针,将malloc返回的指针的值赋给data
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=0; //将顺序表的当前长度设为0
L.MaxSize=InitSize; //将顺序表的最大容量设置成初始值
}
//增加动态数组的长度
//void IncreaseSize(所增加的顺序表,增加的长度)
void IncreaseSize(SeqList &L,int len){
int *p=L.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()
{
SeqList L; //声明一个顺序表
InitList(L); //初始化顺序表
//...往顺序表中插入元素...
for (int i = 0; i < InitSize; i++) {
scanf("%d", &L.data[i]);
}
IncreaseSize(L,5);
return 0;
}
malloc动态分配内存空间
最新推荐文章于 2023-04-26 21:08:24 发布