首页 > 其他分享 >小发现-->对“删除”数组元素的不同做法

小发现-->对“删除”数组元素的不同做法

时间:2024-12-20 19:02:39浏览次数:7  
标签:10 cnt 删除 -- 元素 ++ int 数组

 删除的本质:

对于数组元素删除,其实不能算是删除,毕竟你数组是一片连续存储的空间,你要是真的删除了一个地方那还了得了,所以删除无非就是在输出结果的时候看上去像是某个地方的元素被删除了,实际上呢,要么是被别的元素覆盖了,要么是被标记了,跳过了这个位置进行输出,那么接下来就对着这两种说法展开讲解:

第一种:覆盖形式的删除

其实就是将数组的后面一位向前移动几位,每次都这样,最后再改变一下数组上限,这不就覆盖了吗。

那么代码实现呢也是比较容易理解的:
 

#include<stdio.h>
int main()
{
	int a[10];
	for(int i = 0;i < 10;i++){
		a[i] = i;
	}
	for(int i = 0;i < 10;i++){
		printf("%d ",a[i]);
	}
	putchar('\n');
	//删除5-8之间的元素
	int cnt = 0;
	int n = 10;
	for(int i = 0;i < 10;i++){
		if(a[i] > 5&&a[i] < 8){
			cnt++;
		} else {
			a[i-cnt] = a[i];
		}
	} 
	n -= cnt;
	for(int i = 0;i < n;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

核心部分其实就是:

int cnt = 0;//用来标记覆盖的位数
	int n = 10;
	for(int i = 0;i < 10;i++){
		if(a[i] > 5&&a[i] < 8){
			cnt++;//如果满足条件5-8之间,就让cnt++,这样就可以确定移动的位数了,可以将这个范围的元素过滤掉
		} else {
			a[i-cnt] = a[i];//如果不满足上面的条件就说明得完成覆盖的交接
		}
	} 
	n -= cnt;//缩小数组上限

第二种:将特定元素标记为不可能出现的数字,输出的时候直接跳过就行了

#include<stdio.h>
int main()
{
	int a[10];
	for(int i = 0;i < 10;i++){
		a[i] = i;
	}
	for(int i = 0;i < 10;i++){
		printf("%d ",a[i]);
	}
	putchar('\n');
	//继续删除5-8之间的元素
	for(int i = 0;i < 10;i++){
		if(a[i] > 5&&a[i] < 8){
			a[i] = -1;
		}
	} 
	for(int i = 0;i < 10;i++){
		if(a[i] >= 0){
			printf("%d ",a[i]);
		}
	}
	return 0;
}

总归就是那几种,一般第二种方法是比较常用的,因为它确实快啊,不过第一种方法是真正的进行了删除的操作,所以当你写到了线性表元素的区间删除这种题目的时候,你就得使用第一种方法了。

到这里就结束啦!!!

欢迎小伙伴们评论区讨论,提问。

我是荒古前,期待你的关注~~~

~~~完结撒花✌y( •̀ ω •́ )y✌~~~

标签:10,cnt,删除,--,元素,++,int,数组
From: https://blog.csdn.net/x3477144355/article/details/144493382

相关文章

  • Python网络爬虫技术详解与实战案例
    Python网络爬虫技术详解与实战案例引言网络爬虫(WebCrawler)是一种自动化程序,用于在互联网上收集数据。通过向网页发送HTTP请求,获取网页数据,然后提取和分析网页内容,网络爬虫能够实现数据收集、信息提取和数据分析等多种应用场景。Python作为一种功能强大且易于学习的编程语......
  • flask框架驾校预约管理系统毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景在当今社会,随着汽车保有量的不断增加,驾校的规模和学员数量也在迅速增长。驾校的管理变得日益复杂,传统的管理方式难以满足高效运营的需......
  • 题解 - 趣味填空
    题目描述小华的寒假作业上,有这样一个趣味填空题:给出用等号连接的两个整数,如“1234=492”。当然,现在这个等式是不成立的。请你在等号左边整数中的某个位置尝试插入一个乘号,看有没有可能让等式成立。以上面的式子为例,如果写成1234=492,这样就正确了。现在请你编写一个程序......
  • C++中的智能指针:深入解析与实战案例
    C++中的智能指针:深入解析与实战案例在C++编程中,内存管理一直是一个核心且复杂的话题。手动管理内存不仅繁琐,而且容易出错,如内存泄漏、野指针等问题时常困扰着开发者。为了缓解这些问题,C++11引入了智能指针(SmartPointers),它们通过自动管理内存生命周期,极大地减少了内存管理......
  • flask框架驾照考试知识管理平台毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容驾照考试知识管理平台毕业设计相关内容一、选题背景关于驾照考试知识管理平台的研究,现有研究主要以驾照考试的理论知识教学和传统管理方式为主,专......
  • flask框架健身房信息管理系统毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于健身房信息管理系统的研究,现有研究主要以传统管理模式为主,专门针对信息化、系统化的健身房信息管理系统的研究较少。在国内外,部分......
  • 服务器笔记2——frp配置
    参考了网络文章和官网文档只是记录一下自己需要的配置,防止忘记服务端配置#配置服务IP以及端口bindPort=7000bindAddr="0.0.0.0"#配置http穿透端口vhost_http_port=7600#配置管理页面webServer.addr="0.0.0.0"webServer.port=7500webServer.user="用户名......
  • JLink SDK API 二次开发 C#版本库
    说明参考:https://blog.csdn.net/weixin_47124634/article/details/136183404内容来源于网络,结合UM8002更新了部分函数的签名,增加了一些注释对于函数的使用定义,建议参考UM8002主要头文件usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Text;namespac......
  • Easyfish钓鱼平台 实现企业级规模化的钓鱼演练|攻防演练
    介绍     由于GoPhish底层用的是魔改后的GoMail,在smtp发信上存在一定问题,故抛弃,从个人的角度出发,实现一款简单、易用、轻量的钓鱼演练工具。工具特点替代GoPhish快速实现企业级规模化的钓鱼演练和安全培训,并快速输出成工作成果HVV指定目标钓鱼(申明:软件不含......
  • TS 原理详细解读(6)--语法增量解析
    呃....4年前开了一个坑,准备写一套完整介绍TS原理的文章。坑很大,要慢慢填,今天就来填一个把。本节主要介绍语法增量解析。什么是增量解析增量解析的意思是,如果我们直接从源码解析成语法树,叫做全量解析。语法树是由很多个节点对象组成的,比较吃内存。当用户修改源码后(无论修改哪......