删除其中所有值等于x的元素
法一:
1 void delnodel(SqList*& L, ElemType x) 2 { 3 int i = 0, j = 0; 4 for (i = 0; i < L->length; i++) 5 { 6 if (L->data[i] != x) 7 { 8 L->data[j] = L->data[i]; 9 j++; 10 } 11 } 12 L->length = j; 13 }
法二:
1 void delnodel2(SqList*& L, ElemType x) 2 { 3 int i = 0, j = 0; 4 for (i = 0; i < L->length; i++) 5 { 6 if (L->data[i] == x) 7 j++; 8 else 9 L->data[i - j] = L->data[i]; 10 } 11 L->length -= j; 12 }
以第一个元素为基准,将所有小于等于它的元素移到该基准前面,将所有大于它的移到该基准的后面。
法一:
1 void partition(SqList*& L) 2 { 3 ElemType pivot = L->data[0]; 4 int i = 0, j = L->length - 1; 5 6 while (i < j) 7 { 8 while (i<j && L->data[j]>pivot) 9 j--; 10 while (i < j && L->data[i] <= pivot) 11 i++; 12 if (i < j) 13 swap(L->data[i], L->data[j]); 14 } 15 swap(L->data[i], L->data[0]); 16 }
法二:
1 void partition2(SqList*& L) 2 { 3 int i = 0, j = L->length - 1; 4 ElemType pivot = L->data[0]; 5 6 while (i < j) 7 { 8 while (i<j && L->data[j]>pivot) 9 j--; 10 if (i < j) 11 L->data[i] = L->data[j]; 12 while (i < j && L->data[i] <= pivot) 13 i++; 14 if (i < j) 15 L->data[j] = L->data[i]; 16 } 17 L->data[i] = pivot; 18 }
奇数移到偶数前
法一:
1 void movel(SqList*& L) 2 { 3 int i = 0,j = L->length-1; 4 5 while (i < j) 6 { 7 while (i < j && L->data[j] % 2 == 0) 8 j--; 9 while (i < j && L->data[i] % 2 != 0) 10 i++; 11 if (i < j) 12 swap(L->data[i], L->data[j]); 13 } 14 15 }
法二:
1 void movel2(SqList*& L) 2 { 3 int i = -1, j = 0; 4 for (j = 0; j < L->length - 1; j++) 5 { 6 if (L->data[j] % 2 != 0) 7 { 8 i++; 9 if (i != j) 10 swap(L->data[i], L->data[j]); 11 12 } 13 } 14 }