3.png

    1. /*
    2. 长度为n,删除值为x的数据元素,要求时间复杂度为O(n),空间复杂度O(1)。
    3. 分析:
    4. 用k记录删除元素个个数,一边遍历顺序表一边统计k,并将不等于x的元素向前挪k个位置
    5. */
    6. #include <stdio.h>
    7. void deleteX(int *arr,int n,int len) {
    8. int k = 0,i=0;//进行计数
    9. while (i<len) {
    10. if (*(arr+i)==n) {
    11. k++;
    12. }
    13. else {
    14. *(arr +i- k) = *(arr + i);
    15. }
    16. i++;
    17. }
    18. for (int i = 0; i < len-k; i++) {
    19. printf("%d ", *(arr + i));
    20. }
    21. }
    22. int main() {
    23. int arr[] = {1,2,3,2,4,2};//也可以手动赋值的
    24. int len = sizeof(arr) / sizeof(int);
    25. deleteX(arr,2,len);//要删除的元素也可以有用户输入
    26. return 0;
    27. }