![]()
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 //函数声明
5 int CompactIntegers(int *p,int n);
6
7 int main()
8 {
9 int i;
10 int n,n_final; //n:用于记录要输入的整数个数;n_final:用于记录删除数组中的0元素后数组的长度
11 int *p; //用于指向动态分配的数组空间
12
13 scanf("%d",&n);//输入要输入的整数的个数
14
15 p=calloc(n,sizeof(int)); //动态分配 n 个长度为sizeof(int)连续空间——动态数组(数组元素的个数为 n,类型为int)
16
17 for(i=0;i<n;i++) //输入 n 个整数
18 scanf("%d",p+i);
19
20 n_final=CompactIntegers(p,n); //调用函数 CompactIntegers ,删除数组中所有值为0的元素,其后元素向数组首端移动
21
22 printf("%d\n",n_final); //输出删除数组中的0元素后数组的长度
23
24 for(i=0;i<n_final;i++) //输出删除数组中的0元素后的数组元素
25 printf("%d ",*(p+i));
26
27 return 0;
28 }
29
30 //删除数组中所有值为0的元素,其后元素向数组首端移动
31 int CompactIntegers(int *p,int n)
32 {
33 int i,j;
34 int n_temp; //用于记录删除 0 元素过程中数组的临时长度
35
36 n_temp=n; //赋数组的临时长度为原始长度 n
37
38 for(i=0;i<n_temp;i++) //遍历数组中的元素
39 {
40 if(*(p+i)==0) //找到 0 元素
41 {
42 for(j=i;j<n_temp;j++) //删除数组中所有值为0的元素,其后元素向数组首端移动
43 *(p+j)=*(p+j+1);
44 i--;
45 n_temp--; //数组的临时长度减 1
46 }
47 }
48
49 return n_temp;
50 }