建立動態數組,分成兩部分:數據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後運行結果如下圖: