C语言基础算法——数组元素的查找、删除和添加

从这篇博客开始,我们慢慢要进阶了,小白们,如果觉得我写的还不错,麻烦你注册常来,顺便给我点个赞哈~让更多的人看到此类干货。
——————————————————–华丽分割线————————————————————
今天一样是对数组元素进行相应操作,不过是稍微复杂点的操作,但是在实际生活中又是比较基础的应用。我给思路给程序,发散思维的工作你们脑洞大点,充分发挥自己的想象力并去实施。
——————————————————–华丽分割线————————————————————
一、数组元素的查找和删除
首先,给定一些数组元素(有些同学会问为什么总是给定?不要急,前期牢固基础,后期才能开车载人,成为一名合格的老司机),C中定义好一组数后,数组中的元素有下标或者说索引,比如说,第1个元素就是从下标为0开始,第2个元素下标就是1,…依次类推。
其次,我们遇到个问题:如果要访问数组中的元素,到底是直接访问元素?还是访问元素的下标?访问的计算机思路是什么?(数组元素在这里是数组中的数)
答:通过访问元素下标来访问元素。穷举法。谨记!!!
最后,既然是查找,那我们的思路就是:要查找的是元素的下标。如果和删除操作相结合就是:我们要怎么样才能删除特定的数据,查找到要删除的元素的下标后,然后干嘛?注意:前方高能地想,如果怎么样,那么要干嘛?也就是说,如果找到了,那么我要删除。
重头戏来了,初步思路已经有,你要怎么删除????
比如,1 2 3 4 5,删除 3 是不是成了 1 2 4 5。想想,
1、删除导致元素减少
2、4的位置到了3,5的位置到了4
总结:所谓删除逻辑就是,后面一个数覆盖前面一个数,最后数量要减少了1。

二、数组元素的添加
承接上面的删除操作,下启添加操作。
添加到底是个什么操作呢?假设你要挖墙脚,如狼似虎、饥渴难耐的你在微信和她聊天,表白之后的结果就是,你再发送消息会收到“您还不是对方的好友,请通过验证添加对方为好友”的回复,即你被删除好友了。后来她和她的男友吹了,她想起了你(备胎一号),而后添加了你。此时,刚添加的朋友在通讯录里是最后一位,而刷新一下之后,朋友列表会按照昵称拼音的首字母进行排序。
要划重点了,同学们。你先是被添加了,通讯录里才有你,也就是说,先进行添加操作,再执行整体数量加1的操作。通讯录好比一个数组,刚添加的你是在最后一位,通讯录扩充了,而刷新后,你被排序了。(排序可用之前的冒泡排序,我敲的累所以没写)
总结:
1、先执行添加操作,再执行数组长度 + 1 的操作
2、刚被添加的元素在数组末位
3、这里是数字,升序还是降序排列,随你,用我第一篇博客的方法去实现

好啦,上程序代码:

#include 

//查找和删除的业务逻辑
 /*****************************************
 *1、查找要删除数字的下标
 *2、从下标开始,后面一个覆盖前面一个数字
 *3、数组总长度-1
 ******************************************/
int main()
{
    int count = 7;                //数组元素个数
    double Nums[] = {423.2, 457.7, 409.0, 412.3, 407.6, 580.3, 320.5};
    int JudgementNum;             //用户进行下一步操作的判断数
    double InsertNum;             //用户要插入的数据
    double DeleteNum;             //用户要删除的数据
    int DeleteIndex = -1;         //删除某个数据的下标(索引),要给一个不可能的初值,方便判断。

    int i;                        //循环变量

    printf("当前采集到的数据为:\n");
    for(i = 0; i < count; i++)
    {
        printf("%.2lf\t", Nums[i]);
    }
    printf("\n\n是否需要删除部分数据?\n提示:输入数字1进行删除操作,输入数字0确认当前数据采集无误。\n");
    printf("请输入:");
    scanf("%d", &JudgementNum);
    if(JudgementNum == 1)
    {
        printf("\n请输入要删除的数据:");
        scanf("%lf", &DeleteNum);
        for(i = 0; i < count; i++)       //穷举法,是常用算法之一
        {
            if(DeleteNum == Nums[i])     //Nums[i]表示数组中的第i个元素
            {
                //找到后并记录当前数据的下标(索引)
                DeleteIndex = i;
                break;                   //找到了要删除的数据,直接跳出循环,提升效率
            }
        }
        //根据索引的判断,如果你要删除的数的下标和所给定索引的初值相同,那么肯定就是没找到。
        if(DeleteIndex == -1)
        {
            printf("没有找到该数据,删除失败!\n");
        }
        else
        {
            //如果找到了,建立一个循环并且从下标开始,数组中的元素后面一个覆盖前面一个,且数组长度 - 1
            for(i = DeleteIndex; i < count - 1; i++)
            {
                Nums[i] = Nums[i+1];
            }
                count--;
            //并打印输出后的结果
            printf("\n第%d个数据将被删除,删除后的结果为:\n", DeleteIndex + 1);
            for(i = 0; i < count; i++)
            {
                printf("%.2lf\t", Nums[i]);
            }
        }
    }else if(JudgementNum == 0)
    {
        printf("当前数据采集无误并保存!");
    }
    else
    {
        printf("删除数据操作发生错误!");
    }
    //注意:以下程序实现的是删除数据之后的插入操作
    printf("\n\n是否需要添加部分数据?\n提示:输入数字1进行添加操作,输入数字0保存当前数据。\n");
    printf("请输入:");
    scanf("%d",&JudgementNum);
    if(JudgementNum == 1)
    {
        printf("\n请输入要添加的数据:");
        scanf("%lf", &InsertNum);
        //进行添加操作,再数组长度+1
        Nums[count] = InsertNum;
        count++;
        printf("\n添加数据后的结果为:\n");
        for(i = 0; i < count; i++)
        {
            printf("%.2lf\t", Nums[i]);
        }
    }else if(JudgementNum == 0)
    {
        printf("当前数据已被保存。\n");
    }
    else
    {
        printf("添加数据操作发生错误\n");
    }
    return 0;
}

程序设计细节:
我增加了程序的判断能力(用好if-else if-else结构)
1、是否需要进行删除操作,通过输入0还是1进行。同理添加操作。
2、输入的是数字还是其他数字对程序的执行结果不同。

程序测试结果:
C语言基础算法——数组元素的查找、删除和添加_第1张图片
C语言基础算法——数组元素的查找、删除和添加_第2张图片
C语言基础算法——数组元素的查找、删除和添加_第3张图片

你可能感兴趣的:(C语言机制)