两个C函数的对比(软考笔记整理)

今天复习软考程序题,发现很多知识点很难应用到程序上。睡觉之前做个笔记整理一下,也是方便以后复习了。

首先问题是,对于具有n个元素的整型数组a,需要进行处理的是删除a中的所有值为0的数组的元素,并将a中所有非零的元素按照原顺序持续地存储在数组空间的前端,并且最后返回非零元素的个数。

解决思路是先申请一个与数组a的大小相同的动态数组空间,然后依次扫描数组a中的每一个元素,将非零的元素依次复制到新申请动态数组空间,到最后再将动态数组中的元素传回a中。

代码如下:

这个函数的思路很容易理解,但是由于数组a的数据需要复制给temp然后再复制回来,因此需要有更多的空间支持,处理速度的时间也会更长。而且这段代码也存在一定的缺点,因为有可能由于申请内存空间的要求得不到满足,从而导致函数的功能不能实现,而且最后也没有释放动态数组空间,存在内存泄露问题。

还有另外一种解决的思路:利用下标i(初值为0)一次扫描数组a的每一个元素,下标k(初值为0)表示数组a中连续存储的非0元素的下标。扫描时,每遇到一组数组元素,i就增加1,而遇到非零元素并且将其前移后k才增1。

代码如下:

其实解决同一种问题有很多种不同的方法,每个方法都有自己的特点,所以在解决问题的时候应该多考虑,选择更好的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值