刪除順序表中的某個元素
實現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]; ,避免邏輯上的錯誤

