数据结构——线性表1.动/静态分配

数据结构——线性表

一、线性表的静态分配

/*
 *  线性表的静态分配 2020/5/5 
 *  
 */

#include 
#define MaxSize 10
typedef struct {
    int data[MaxSize];  //用静态的“数组”存放数据元素
    int length;     //顺序表的当前长度
} SqList;

//初始化一个顺序表
void InitList(SqList &L){
    L.length=0;
}
int main(){
    SqList L;   //声明一个顺序表
    InitList(L);
    for (int i = 0; i < L.length; i++)
    {
        printf("data[%d]=%d\n", i , L.data[i]);
    }
}

二、线性表的动态分配

/*
 *  线性表的动态分配 2020/5/5 
 *  1.malloc函数:申请一片连续的存储空间
 *  2.malloc函数返回值:申请的空间的起始地址
 */
#include 
#include 
#define InitSize 10
typedef struct {
    int *data; //指示动态分配数组的指针
    int length;  //顺序表的当前长度
    int MaxSize;
} SqList;

//初始化 动态 顺序表
void InitList(SqList &L){
    L.data=(int *)malloc(InitSize*sizeof(int)); //malloc函数申请一片连续的存储空间
    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));  //开辟了一片新的空间,比之前的空间大len,并将data指向到新开辟的区域
    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);   //初始化顺序表
    for (int i = 0; i < L.length; i++)
    {
        printf("data[%d]=%d\n", i , L.data[i]);
    }
    
    IncreaseSize(L,5);//增加动态数组的长度
    return 0 ;
}


你可能感兴趣的:(数据结构)