intmain() { int arr[] = {1, 2, 3, 2, 4, 2, 5}; int n = sizeof(arr) / sizeof(arr[0]); int x = 2; // 调用函数并获取删除x后有效元素的个数 int new_n = delete_x(arr, n, x); printf("After deleting %d, the sequence list is: ", x); for(int i = 0; i < new_n; i++) { printf("%d ", arr[i]); } return0; }
// 删除顺序表中所有值为x的元素的函数 intdelete_x(int SqList[], int n, int x) { int i = 0; // 头指针 int j = n - 1; // 尾指针 while (i <= j) { // 找到最左端值为x的元素 while (i <= j && SqList[i] != x) { i++; } // 找到最右端值不为x的元素 while (i <= j && SqList[j] == x) { j--; } // 如果i<=j,交换这两个元素,然后移动指针 if (i <= j) { int temp = SqList[i]; SqList[i] = SqList[j]; SqList[j] = temp; i++; j--; } } // i的位置是第一个可能为x的位置,因此有效元素数量为i return i; }