删除数组零元素

 

 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 }
posted @ 2015-03-07 22:43  LeoFeng  阅读(412)  评论(0编辑  收藏  举报