课内上机实验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,再检查下一个元素。