顺序表的实现--动态分配

#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));
    L.length=0;
    L.maxSize=initSize;
}
//增加动态数组长度 
void IncreaseSize(SqList &L,int len){
    int *p=L.data;
    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;
    free(p);//释放原来的内存空间 
}
int main(){
    SqList L;
    initList(L);
    //.....随便插入几个元素 
    IncreaseSize(L,5);
    return 0;
}#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));
    L.length=0;
    L.maxSize=initSize;
}
//增加动态数组长度 
void IncreaseSize(SqList &L,int len){
    int *p=L.data;
    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;
    free(p);//释放原来的内存空间 
}
int main(){
    SqList L;
    initList(L);
    //.....随便插入几个元素 
    IncreaseSize(L,5);
    return 0;
}

malloc函数申请一片连续的存储空间,并返回一个指针(一整片连续空间的起始地址)赋给data

所以data指针此时指向起始位置地址

定义指针p,将data指针的值赋给p,即p指针此时也指向该连续空间的起始地址

data指针又指向新的内存空间

free(p) #

猜你喜欢

转载自www.cnblogs.com/ikigai18/p/12708760.html