------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
MJ大大在讲C语言的时候,没有讲到如何在数组(包含字符串数组)中插入、删除、查找(通过值查找序号)、修改一个元素。那么自己就来思考下,根据已学知识,该如何做到这三件事情吧~
分析:
首先,数组的内存存储方式:
1. 圈地:从内存地址大的位置开始,向上数sizeof数组个单位,占领这些单位并插上自己的小红旗~
2. 驻兵:从内存地址小的位置开始派兵驻守,把自己的元素一个一个安插进去
3. 注意:一个元素一个坑哦!
由内存存储方式我们可以分析到,数组根据元素个数和圈地面积的关系,可以分成两种:
第一种:所有地都有驻兵
第二种:部分太偏远(内存位置较大)的地没有驻兵
于是我们的分析思路也要做一个二叉树式的分支了~
If (所有地都有驻兵)
{
思路一:再占领一块地(内存位置更小的地,因为内存是从大到小存储的,内存大的地可能有别的变量占据了),把新加入的兵安插进去,安插位置以前的兵统一向前移动一个单位;
思路二:舍弃旧领地,重新占领一块比旧领地更大的领地,把兵们都迁移过来;
}
else if(有一些地没有驻兵)
{
让要插入位置及以后的兵统一下移一个单位,空出一个坑来给新兵
}
OK,思路分析清楚以后,再来思考下实现手段:
第一种:用循环语句及赋值的方式实现某个位置后的兵统一后移一个单位;
第二种:位运算符 >> 不知道可不可以用
思路分析清楚了,我们来代码实验一下吧~~~ 好了现在开始做实验了,半个小时后给大家带来战报~~~稍等哦!
--------------半个小时过去了----------------
/* 希望实现给已有数组插入元素而进行的实验
* 实验人:Azen同学
* 日期:2015-1-25
* 主题:把新来的士兵安插进第二个位置!
*/
#include <stdio.h>
int main()
{
//定义一个数组和一个新来的士兵
int city[10] = {1,2,3,4,5,6,7,8,9};
int new_solider = 38;
//因为数组没装满,首先试试位移方法
/*
//位移手段一:赋值 注意,要从最后一个元素开始移起,一共移动8个人
int count;
for(count = 8;count > 0;count--)
{
city[count+1] = city[count];
printf("%d\n",city[count+1]);
}
city[1] = new_solider;
for(count = 0;count <10;count++)
printf("%d\n",city[count]);
测试成功
*/
// 测试位运算符方法 - 测试失败
int count;
for(count = 8;count >0;count++)
{
city[count] >> 32;
printf("%d\n",city[count+1]);
}
/*city[1] = new_solider;
for(count = 0;count <10;count++)
printf("%d\n",city[count]);
*/
return 0;
}
用位运算符操作的方法测试失败了。原因暂时没找到,嘿嘿嘿。。指挥官不好当啊~~
但是!赋值的方法成功了哦!哟西!
查找元素思路也是一样的,用for循环遍历每个元素,然后跟上一个if语句即可。
OK~第一篇技术博客就到这里啦~ 士兵们,你们辛苦啦~ 好好休息休息吧~~