课内上机实验3——数组内移动0元素至末尾

题目描述:将数组内0元素移动到最后面,其他元素相对位置不变,输出整个数组

代码如下:

#include <stdio.h>
#define MAXN 1000
int all_zero(int a[],int n)//check if a[] only has 0
{
    int flag = 1;
    for (int t = 0; t < n; t++) {
        if (a[t] != 0) {
            flag = 0;
            break;
        }
    }
    return flag;
}
int main(int argc, const char * argv[])
{
    int n,del_num;
    del_num = 0;
    scanf("%d",&n);
    int a[MAXN];
    for (int i = 0; i < n; i++) {
        scanf("%d",&a[i]);
    }
    for (int j = 0; j < n - 1 -  del_num; j++) {
        if (j == 0 &&all_zero(a,n)) {
            break;
        }
        while(a[j]==0) {
            for (int k = j; k < n - del_num; k++) {
                a[k] = a[k+1];
            }
            a[n-1-del_num]=0;
            del_num++;
        }
        
    }
    for (int m = 0; m < n; m++) {
        printf("%d ",a[m]);
    }
    
    return 0;
}

当检查到0元素时,上述代码采用冒泡方法将0元素移动到末尾,此时应注意0元素的下一个元素是否也是0元素。因此令表头j一直站在当前元素,直到从后往前窜过来的元素不是0,再检查下一个元素。

原文地址:https://www.cnblogs.com/liuhao-1997/p/4984062.html