提高项目24-删除数组元素

来源:互联网 发布:网络直播运行模式 编辑:程序博客网 时间:2024/06/05 07:03
任务和代码:del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。函数的原型为:
int del (int a[10],int n,int x)
(1)请实现这个函数,并完成测试。

(2)如果在函数调用时,要求数组中的元素呈升序排列呢?

/*文件名:main.c作者:小风景完成日期:2016.7.6问题描述:del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。函数的原型为:int del (int a[10],int n,int x)(1)请实现这个函数,并完成测试。(2)如果在函数调用时,要求数组中的元素呈升序排列呢?程序输出:*/#include <stdio.h>int del(int a[],int n,int m);int main(){    int a[20]= {86,76,62,58,77,85,92,80,96,88,77,67,80,68,88,87,64,59,61,76};    int i, n;    n = del(a, 20, 77);   //在长度为n的a数组中删除m    printf("删除后,数组的剩余元素剩余%d个为:\n",n);    for(i=0; i<n; ++i)        printf("%d ", a[i]);    printf("\n");    return 0;}int del(int a[],int n,int m){    int i = 0;    int j = 0;    while(i < n)    {        if(a[i] != m)        {            a[j] = a[i];            j++;        }        i++;    }    return j;}



程序运行结果:


总结:对于无序的数组操作,只需要将不等于需要删除的数按照顺序排列就好,当遇到要删除的数,跳过,然后将后面的数覆盖到要删除的数的位置.


2)有序数组的删除

/*文件名:main.c作者:小风景完成日期:2016.7.6问题描述:del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。函数的原型为:int del (int a[10],int n,int x)(1)请实现这个函数,并完成测试。(2)如果在函数调用时,要求数组中的元素呈升序排列呢?程序输出:*/#include <stdio.h>int del(int a[],int n,int m);int main(){    int a[20]= {58, 59, 61, 62, 64, 67, 68, 76, 77, 77, 77, 80, 80, 85, 86, 87, 88, 88, 92, 96};    int i, n;    n = del(a, 20, 77);   //在长度为n的a数组中删除m    printf("删除后,数组的剩余元素剩余%d个为:\n",n);    for(i=0; i<n; ++i)        printf("%d ", a[i]);    printf("\n");    return 0;}int del(int a[],int n,int m){    int i = 0;    int j = 0;    while((i < n) && (a[i] < m))    {        i++;    }    j = i;    while((j < n) && (a[j] == m))    {        j++;    }    while(j < n)    {        a[i++] = a[j++];    }    return i;}


程序运行结果:



总结:对于有序数组,现将小于要删除的数前面的部分找出,然后跳过要删除的数,将后面的数覆盖要删除数的位置。

0 0