顺序表的动态分配
元素为int类型
与静态分配的区别,主要体现在定义,初始化,销毁,自动增长
查找,赋值操作是差不多的
重载的方式来实现动态分配的
定义

image-20210329111015697
typedef struct{
int *data;
int length; //当前长度
int maxsize; //最大容量
}Dynamiclist;
初始化
void initDynamicList(Dynamiclist & l){
l.data=(int *)malloc(sizeof(int) * MAXSIZE);
if(!l.data){! cout
销毁
为了健壮性,最后再令其为空指针
bool destroyList(Dynamiclist &l){
free(l.data);
l.length=0;
l.maxsize=0;
l.data=nullptr;
if(!l.data){
return true;
}
return false;
}
增长
void increaseList(Dynamiclist &l,int n){
int * p =l.data;
l.data=(int *)malloc(sizeof(int)*(l.maxsize+n));
for(int i=0;i
插入元素
当长度满了的时候,自动扩增指定长度的
bool insertList(Dynamiclist & l,int n,int number){
if(nl.length+1){
cout =l.maxsize){
//自动增长长度 MAXSIZE
increaseList(l,MAXSIZE);
}
for(int i=l.length;i>=n;i++){
l.data[i]=l.data[i-1];
}
l.data[n-1]=number;
l.length++;
return true;
}
删除
bool deleteListByOrder(Dynamiclist & l,int n,int &number){
if(nl.length){
cout
查找
注意这里的数组形式,因为分配的时候,malloc(int)长度为单位的,用数组[]内部会自动转换成地址加长度,即下一个
int findElementByOrder(Dynamiclist l,int n){
return l.data[n-1];
}
int findElementByValue(Dynamiclist l,int num){
for(int i=0;i
其他
void printList(Dynamiclist l){
for(int i=0;i
结果
==代码测试==
void test_dy(){
Dynamiclist l;
initDynamicList(l);
//表空
if(isEmpty(l)){
cout
==结果==
表空
插入成功
第1个元素是0
第2个元素是1
第3个元素是2
第4个元素是3
第5个元素是4
第6个元素是5
第7个元素是6
第8个元素是7
第9个元素是8
第10个元素是9
表长为11
5的位序是6
位置6的是5
删除的是5
第1个元素是0
第2个元素是1
第3个元素是2
第4个元素是3
第5个元素是4
第6个元素是6
第7个元素是7
第8个元素是8
第9个元素是9
第10个元素是11
表空?1