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; }
浙公网安备 33010602011771号