删除顺序表中的某个元素
实现1:(查找到与value相同的元素,将指针不断右移知道与value不同)
C++代码:
void del_elem(int *sqList,int value,int & length){ int i,d=0; for(i=0;i<length-d;i++){ while(sqList[i+d]==value){ d++; } sqList[i]=sqList[i+d]; } length-=d; }
注意点:记得使用while语句做判断,不然不能删除连续的value
实现效果:
仿王道伪代码:
1 void del_x_l(sqList & L,ElemType x){ 2 int i,d=0; 3 for(i=0;i<sqList.length-d;i++){ 4 while(sqList.data[i+d]==x){ 5 d++; 6 } 7 sqList.data[i]=sqList.data[i+d]; 8 } 9 sqList.length-=d; 10 }
王道P20 T3
实现2:(用辅助下标k记录与value不同的元素)
C++代码:
1 void del_elem(int *sqList,int value,int & length){ 2 int i,k=0; 3 for(i=0;i<length;i++){ 4 if(sqList[i]!=value){ 5 sqList[k++]=sqList[i]; 6 } 7 } 8 length=k; 9 }
实现3:(用k记录与value相同的元素数量)
C++代码:
void del_elem(int *sqList,int value,int & length){ int i,k=0; for(i=0;i<length;i++){ if(sqList[i]==value){ k++; }else{ sqList[i-k]=sqList[i]; } } length-=k; }
注意点:不能写成 sqList[i]=sqList[i-k]; ,避免逻辑上的错误