02.第二章,初始化,增删改查,速查笔记

 

静态数组定义

typedef struct{
    int data[Maxsize];    //定义一个静态数组存放元素
    int length;           //顺序表当前长度
}SL;                      //顺序表的类型定义

 

 

动态顺序表定义

typedef struct {
    int *data;    //指示动态分配数组的指针
    int Maxsize;  //顺序表最大长度
    int length;   //顺序表当前长度

}SL;

 

 

初始化顺序表

//初始化一个顺序表,
void InitList(SL &L)
{
    L.length = 0;  //只是初始化开始长度,但是没有初始化数据,
                    //这样如果打印的话就会发现一个系统以前用这个地址存放的数据
                    //但是对我们来说是没有用的,
    //但是这个初始化长度不能省略,这个是我们读多少个数据的关键,
}

 

 

初始化一个动态顺序表

void InitList(SL &L){
//使用malloc函数申请一片连续的储存空间

    L.data = (int *)malloc(Initsize*sizeof(int));
    L.length = 0;
    L.Maxsize = Initsize;

}

 

增加动态顺序表长度

//增加动态数组的长度,增加类型是SL的数组L的长度,多加上len
void InceraseSize(SL &L,int len){

//定义一个指针变量指向第一个值的指针,防止下一步把L.data指针重新分配后找不到数据
    int *p = L.data;
    
    //现在要一片重新分配的(最大长度加上想要增加的长度)*4b的大小空间
    L.data = (int *)malloc((L.Maxsize+len)*sizeof(int));

    //把数据赋值到新的数据地址里面
    for(int i = 0; i <L.length ; i++){
        L.data[i] = p[i];         //指针p起到了作用
    }
    
    L.Maxsize = L.Maxsize + len;   //最大长度增加len

    //将p中的数据释放
    free(p);
    

}

 

 

 

顺序表插入操作

//插入操作,给L这个列表第i个元素大位置插入e这个数据
//即需要将第i以及之后的元素后移一个
bool ListInsert(SL &L, int i,int e){

    //判断i是否有效,
    if(i<1||i>L.length+1){
        return false;
    }
    if(L.length>=Maxsize)
        return false;
    
    //将第i个元素往后移动一位
    for(int j = L.length; j>=i ; j--)
        L.data[j]=L.data[j-1];
    
    L.data[i-1] = e;
    
    L.length++;
    
    return true;
}

 

posted on 2020-08-09 11:52  盛世孤舟  阅读(164)  评论(0)    收藏  举报

导航