C语言 - 删除数组中的指定元素(Delete)

这篇具有很好参考价值的文章主要介绍了C语言 - 删除数组中的指定元素(Delete)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 文章来源地址https://www.toymoban.com/news/detail-405687.html

引言:

题目说明:

举例分析:

初始状态:

step 1: 

Step 2: 

Step 3 : 

Step 4 :  将最后一个元素赋值为0

 Step 5 :将i下标向前迁移一位(重复判断):

代码实现: 

总结:


 

引言:

这是数组中一个比较简单的题目,今天把它单独拎出来的原因就是在我即将要写的数据结构的顺序表和链表中的增删改查功能里面的删除功能与这个题目的思路是一致的,个人感觉有必要进行一下说明。

题目说明:

当我们要进行删除元素函数的时候,理论上的删除元素是不能实现的,我们可以通过让后面的元素对前面的元素进行覆盖来达到这一效果,在这里我先举一个以删除数组中指定元素的例子:

例如在这里我们需要删除一个长度为10个单位的数组里面的指定元素4,我们需要做的是使用下标i对原始数组进行遍历,当满足i号下标元素等于我们指定要删除的元素这个条件时,再使用一个j下标定位至i下标的位置,j的循环结束边界为数组末尾的前一个元素,利用循环将后一个元素的值覆盖前一个元素的值,通俗地讲也就是元素的迁移:

举例分析:

例如我在一个长度为10的数组中分别填充了1,2,3,4,5,6,7,8,9,10这十个元素,现在要求删掉元素8,我们在画板上来演示过程:

初始状态:

我们设立两个下标i和j,在开始的时候分别指向数组的首元素:

C语言 - 删除数组中的指定元素(Delete)

step 1: 

下标i开始对数组进行遍历,到达8的位置停下,8也就是(ar[7])就是我们要删除的数据:

C语言 - 删除数组中的指定元素(Delete)

 

Step 2: 

此时我们将j下标与i下标进行对齐,并将下标后的9和10元素分别向前迁移一个单位,也就是9覆盖8,10覆盖9,并将最后一个元素赋值为0:

C语言 - 删除数组中的指定元素(Delete)

Step 3 : 

C语言 - 删除数组中的指定元素(Delete)

Step 4 :  将最后一个元素赋值为0

C语言 - 删除数组中的指定元素(Delete)

 Step 5 :将i下标向前迁移一位(重复判断):

C语言 - 删除数组中的指定元素(Delete)

如果此时数组里面填充的元素分别是1,2,3,4,5,6,7,8,8,9,那么当i下标向前迁移一位后,重新指向8就再次进入循环,输出结果就为1,2,3,4,5,6,7,9,0,0,i下标向前迁移一位的作用就是对原先位置的元素重新进行是否符合条件的判断。

代码实现: 

#include<stdio.h>
#include<assert.h>
void Show_ar(int *ar,int len)//打印函数
{
    assert(ar != NULL);
    for(int i = 0;i < len;i++){
        printf("%d ",ar[i]);
    }
}
void Fill_number(int *ar,int len)//元素填充数组函数
{
    assert(ar != NULL);
    for(int i = 0;i < len;i++){
        scanf("%d",&ar[i]);
    }
}
void Remove_number(int *ar,int len,int value)//删除元素函数
{
    assert(ar != NULL);
    for(int i = 0;i < len;i++){
        if(value == ar[i]){
            for(int j = i;j < len - 1;j++){
                ar[j] = ar[j + 1];
            }
            ar[len - 1] = 0;
            i--;
        }
    }
}
int main()
{
    //删除一个元素,后面用0来进行填充
    int n = 0;
    printf("Please enter the size of the array:\n");
    scanf("%d",&n);
    int ar[n];
    int len = sizeof(ar) / sizeof(ar[0]);
    int value = 0;//value代表你要删除的值
    printf("Please fill the array with numbers:\n");
    Fill_number(ar,len);
    printf("Enter the number you want to delete:\n");
    scanf("%d",&value);
    Remove_number(ar,len,value);
    Show_ar(ar,len);
    return 0;
}

例如我在这里输入的数组总大小为5,依次填充的数据分别为6,7,8,9,10,我指定要删除元素7:

C语言 - 删除数组中的指定元素(Delete)

运行结果如图所示,输出的元素分别为6,8,9,10,0。

例如我在这里输入的数组总大小为10,依次填充的数据分别为1,2,3,4,5,6,7,7,7,8,我指定要删除元素7:

C语言 - 删除数组中的指定元素(Delete)

 运行结果如图所示,输出的元素分别为1,2,3,4,5,6,8,0,0,0,程序中j的下标成功地进行了指定元素的重定向并将元素中的所有元素7删除。 

总结:

这个程序其实代码不难写,主要在过程的剖析和理解上,其实删除这种操作在程序中理论是不能实现的(暂时),我们就可以通过覆盖的方式来达到删除的目的。程序在输入的元素全都不同的情况下可以删除指定的单个元素,在输入的元素有部分相同的情况下,通过下标对元素的重定向可以实现元素的重复删除,难度相对较低。

 

到了这里,关于C语言 - 删除数组中的指定元素(Delete)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode】移除元素、删除有序数组中的重复项、合并两个有序数组

    🧑‍💻作者: @情话0.0 📝专栏:《LeetCode》 🔖题目链接:移除元素、删除有序数组中的重复项、合并两个有序数组 给你一个数组 nums 和一个值 val,你需要 原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空

    2023年04月09日
    浏览(38)
  • Java文件操作(遍历目录中的文件,找到并删除有指定关键字的文件)

    对于通过java对文件继续读取和写入的操作推荐看读取文件和写入文件操作         扫描指定目录中的文件,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件         实际上题目就要求我们对一个指定的目录下的文件进行遍历

    2024年02月13日
    浏览(37)
  • 图灵日记之Leetcode删除有序数组中的重复项&&合并两个有序数组&&移除链表元素

    给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过

    2024年02月04日
    浏览(44)
  • 如何删除数组中的某个元素(C/Python/Java/Go/MATLAB)

    加粗样式 根据之前的文章分享《GitHub 2022 的趋势和见解》,可以看到各种开发语言在最近几年的使用人群占权比,个人也感觉Python是特别受欢迎的。 下面针对几种语言做了简单介绍,并简单写了下《如何删除数组中的某个元素》的实现逻辑和代码示例,希望对看到人有帮助

    2024年02月06日
    浏览(40)
  • Mysql 数据库DML 数据操作语言—— 对数据库表中的数据进行更改UPDATE 和删除DELETE

        delete语句可以有条件,也可以没有,如果没有条件的话就是删除整张表 delete不可以删除表中某一个字段的值,但是update可以; 

    2024年01月19日
    浏览(44)
  • C语言实现冒泡排序排列数组中的元素!

     按照 图中的方法 来编写程序: 1、 void* base,    //base中存放的是待排序数据中第一个对象的地址 2、 size_t num,    // 待排序数据元素的个数 3、 size_t width,    // 待排序数据中一个元素的大小,单位是字节 4、i nt(__cdecl* compare)(const void* elem1, const void* elem2) // 函数指针  用来比

    2024年02月15日
    浏览(27)
  • 利用java语言中的stream流操作判断一个数组中是否有重复元素

    判断数组中是否有重复元素可以说是每一个编程语言初学者都会遇到的题目,常见的各种搜索算法本文不做赘述了,我们这次介绍的是利用java语言中特有的stream流操作来判断通用类型数组是否包含重复元素。 首先我们声明一个泛型方法: 表明该方法适用于所有类型的数组。

    2024年02月12日
    浏览(32)
  • Linux定时删除指定目录下文件

    1,例如删除root/tmp下的所有缓存文件,tmp 及下面的所有文件与文件夹都删除后,再重新建立tmp文件夹 /root/tmp 2,给文件赋予执行权限 3,添加Linux中的定时任务, 查看crontab 任务 https://www.cnblogs.com/mr-wuxiansheng/p/14433304.html?ivk_sa=1024320u

    2024年02月16日
    浏览(34)
  • 在数组中查找指定元素

    本题要求实现一个在数组中查找指定元素的简单函数。 函数接口定义: 其中 list[] 是用户传入的数组; n (≥0)是 list[] 中元素的个数; x 是待查找的元素。如果找到 则函数 search 返回相应元素的最小下标(下标从0开始),否则返回−1。 裁判测试程序样例: 输入样例1:

    2024年02月07日
    浏览(57)
  • JS循环遍历并删除指定元素

    昨天一个朋友让我帮她修改的一段代码: 需求要每条数据轮播1分钟,然后删除,运行的时候会发现foreach循环中,删除一个之后,其他的就无法删除了。 【分析原因】 数据格式例如:[\\\'a\\\',\\\'b\\\',\\\'b\\\',\\\'c\\\'],需求是删除item为‘b’的元素 第一次循环:SysNotices数据:[\\\'a\\\',\\\'b\\\',\\\'b\\\',\\\'c\\\'],in

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包