数组的查找、更改、删除、插入;

在学习和做题过程中多次遇到对数组的操作。其中最基础的操作有几中,其中就包括了对数组的查找、更改、插入、和删除的操作,其他的多数操作或者程序的书写都要用到着几种对数组的基本操作。而在这几种操作中最基本的操作是对数组的查找,而其他几种操作都是在此基础上进行。

  • 查找
int FindByValue(int *p,int len,int value)//按值查找,len为数组长度,value为要查找的值;
{
	for (int i = 0; i < len; i++)//对数组进行循环遍历;
	{
		if (p[i] == value)//判断:若找到要查找的值;
		{
			return i + 1;//返回值得下标加一,因为下标是从零开始的;
		}
	}
}

对数组的查找一般返回代查找值所在位置。以上程序之使用与对一个值的查找,若要对二位数组进行查值,可以用void的类型,传两个指针类型的形参,然后用一个表示行一个表示列,然后返回行列值所在地址。如果是对数组中的多个值进行查找,返回所有下标:比如查找一个数组中所有值为2的元素下标,则可以定义个一维数组用来记录下标,然后返回一维数组,最后输出。

  • 更改
void DeleteByValue(int* p,int len,int index,int value)//按值更改
{
	for (int i = 0; i < len; i++)
	{
		if (p[i] == index)//所要更改的值,我这只是更改值为index的元素,大家可以根据程序的要求自行更改条件;
		{
			p[i] = value;
		}
	}
}

对数组的更改相对比较简单,主要是找到要更该的值,然后更改就可以。

- 删除

void ArrayDeleteByValue(int *p, int* len, int value)//数组删除;
{
	int i,j;
	for (i = 0, j = 0; j < len; j++)
	{
		if (p[j] == value)//if找到要删除的数,结束本次循环,j++,向前查找直到找到不是value的数;
		{
			continue;
		}
		p[i] = p[j];//把第i个下标的元素的值赋给第j个下标的元素
		i++;
	}
	*len=i;//返回新的数组长度;
}

对数组的删除:定义两个下标 i,j,向后便利,如找到要删除的值i不变,j++;若找到下一个不是要删除的值,把 j 赋值给 i 然后 i 和 j 都++;如此向后便利整个数组,对数组进行删除;此处用的是一般数组,若是字符数组最后要把p[i]=’/0’;这样可以在数组的输出过程中输出删除后的数组。这只是本人的一点建议,此方法仅供参考;如果有好的建议可以多多交流;

  • 插入
void ArrayInsertByIndex(int *p, int *len, int index, int value)//数组插入;
{
	/*if (*len < index)
	{
		printf("要插入位置越界, 不做插入操作\n");
	}*/
	if (*len < index)
	{
		printf("要插入位置越界,强制插入数组的最后一个\n");
		p[*len-1] = value;
	}
	else
	{
		int i = *len - 2; //因为插入操作所以定义数组时长度定义长了一个,而下标从0开始,所以i=*len-2
		int j = *len - 1;
		for (; i >= 0; j--, i--)
		{
			if (i + 2 == index)//前插入操作
			{
				p[j] = value;
				j--;
			}
			p[j] = p[i];
		}
		*len=j;
	}
}

数组的插入,一般情况用的是字符串。此处用的是整型数组,方法都是殊途同归。数组的插入都是从后向前遍历的。同删除相同的是定义两个变量 i,j ,i指向的是原数组的最后一个元素的下标,j指向的是(要插入数)+(i指向的下标)然后向前遍历,若找到要插入的位置i不变j向前+1,然后把要插入的值赋值个此时的p[j],如此向前遍历,最后如果是字符数组把此时p[j+1]的值赋值为字符串的结束字符‘\0’,如果是整型数组把j的值赋个*len;输出函数传参为此时的新程度;

  • 输出函数
void Show(int *p, int *len)//传参长度要传删除或插入后更改后的长度
{
	for (int i = 0; i < *len; i++)
	{
		printf("%d,", p[i]);
	}
	printf("\n");
}
此函数一般只用于整型数组的输出,而字符型数组的输出用gets()函数输出;
  • 主函数
int main()
{
	int a[11] = { 1,2,3,4,5,6,7,8,4,9 };
	int s,n;
	scanf("%d%d",&n,&s);//可以自行根据要进行的操作决定更改定义一个或者两个参数,
						//一般的n表示位置或者要删除的数,s表示要更改或者插入的数;
	int len = sizeof(a) / sizeof(a[0]);//计算数组的长度;
	/*ArrayDeleteByValue(a, &len, n); */
	/*ArrayInsertByIndex(a, &len, s, n);*/
	 /*s=FindByValue(a, len, n);
	 printf("%d\n", s);*/
	DeleteByValue(a,len, n, s);
	Show(a, &len);//数组的输出
	return 0;
}

这是我对上述操作所用到的主函数;
第一次写,可能有一点小瑕疵,希望大家可以多提取宝贵的意见,谢谢~!

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值