线性表的插入删除查找

建立动态数组,分成两部分:数据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后运行结果如下图:
在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页