建立动态数组,分成两部分:数据elem和线性表的长度length,elem与initsize为数据的捆绑
typedef struct{
elemtype* elem;
int initsize;
int length;
}sqlist;
//初始化:1.给动态数组分配空间 2.线性表清空length=0;
void InitList_sq(sqlist& L){
L.elem=(elemtype*)malloc(1000*sizeof(elemtype));//malloc前面括号是强制转换
L.initsize=1000;
L.length=0;
}
//显示
void show(sqlist& L){
for(int i=0;i<L.length;i++)
cout<<L.elem[i]<<" ";
cout<<endl;
}
//对线性表赋值
void fuzhi(sqlist& L,int n){
for(int i=0;i<n;i++){
int data;
cin>>data;
L.elem[i]=data;
L.length++;//每次赋值后线性表的有效长度加一
}
show(L);
}
//线性表中查找特定元素
void getelem_sq(sqlist L,elemtype e){
// for(int i=0;i<L.length;i++){
// if(L.elem[i]==e)
// cout<<L.elem[i]<<" "<<"查找成功"<<endl;
// }
// cout<<"查找失败"<<endl;
int i=0;
while(i<L.length){
if(L.elem[i]==e){
cout<<L.elem[i]<<" "<<"查找成功"<<endl;
break;
}
i++;
}
if(i==L.length)
cout<<"没有找到指定元素"<<endl;
}
//线性表的插入
void ListInsert(sqlist& L,int i,elemtype e){
// //L存在是否有插入的空间
if(L.length==L.initsize){//说明没有插入的空间了
elemtype* newbase;//newbase应与L.elem的类型相同
newbase=(elemtype*)realloc(L.elem,(L.initsize+100)*sizeof(elemtype));//realloc()增加空间
L.elem=newbase;
L.initsize=L.initsize+100;
}
//if(L){???他不是链表,没有为空的时候
//判断i值是否合法
if(i<=L.length){
//从后面向前遍历,找到第i-1个位置后,后面的元素都向后移
for(int j=L.length;j>=i;j--){
L.elem[j]=L.elem[j-1];
}
//第i个元素,数组下标为i-1
L.elem[i-1]=e;
//线性表有效长度加一
L.length=L.length+1;
show(L);
}
//}
}
//线性表的删除
void ListDelete(sqlist&L,int i,elemtype& e) {
//判断i值是否合法
if(i<L.length){
for(int j=i;j<L.length;j++){
//i-1后的每一个元素都往前移
L.elem[j-1]=L.elem[j];
}
e=L.elem[i-1];
}
L.length--;
show(L);
}
在main函数中调用
int main(){
int e=0;
sqlist p;
InitList_sq(p);
fuzhi(p,4);
getelem_sq(p,3);
ListInsert(p,2,6);
ListDelete(p,2,e);
return 0;
}
输入1 2 3 4后运行结果如下图: