【专题】 - 数组元素操纵探索 - 黑马程序员

------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~第一篇技术博客就到这里啦~ 士兵们,你们辛苦啦~ 好好休息休息吧~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值