DS-1-顺序表的静态分配与动态分配的实现

所谓顺序表即以顺序存储的方式实现线性表

以下为静态分配实现

#include <stdio.h>
#define MaxSize 10    //最大长度
typedef struct{
    int data[MaxSize];
    int length;        //当前长度
}SqList;            //顺序表静态定义

void InitList(SqList &L){
    for(int i = 0; i < MaxSize; i++)    //设置默认值可省略
        L.data[i] = 0;
    L.length = 0;        //length默认值不可省略
}

int main(){
    SqList L;
    InitList(L);

    return 0;
}

以下为动态分配实现

#include <stdlib.h>

#define InitSize 10        //默认最大长度
typedef struct{
    int *data;
    int MaxSize;    //最大容量
    int length;        //当前长度
}SeqList;

void InitList(SeqList &L){
    L.data = (int *)malloc(InitSize*sizeof(int));
    L.length = 0;
    L.MaxSize = InitSize;
}

//增加动态数组的长度
void IncreaseSize(SeqList &L, int len){
    int *p = L.data;
    L.data = (int *)malloc(sizeof(int)*(L.MaxSize + len));
    for(int i = 0; i < L.length; i++){
        L.data[i] = p[i];        //将数据复制到新区域
    }
    L.MaxSize = L.MaxSize + len;
    free(p);    //释放原有空间
}

int mian(){
    SeqList L;
    InitList(L);
    IncreaseSize(L,5);

    return 0;
}

//虽然实现了动态分配,但需要将原数据复制到新区域,时间开销较大

 

posted @ 2020-06-13 13:23  swefii  阅读(429)  评论(0编辑  收藏  举报