線性表的插入刪除查找

建立動態數組,分成兩部分:數據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後運行結果如下圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章