有序一维数组的增删查改—C语言

(一)增:

#include<stdio.h>
int main(){
	int a[11] = {11,22,33,44,55,66,77,88,99,111};
	int m,end,temp1,temp2;
	int i, j;
	printf("please input new number:");
	scanf("%d", &m);
	end = a[9];
	if (m >= end) {
		a[10] = m;
	}//比较这个数和数组的最后一个数的大小,如果大于最后一个数直接插入数组末尾即可
	else {
    for (i = 0; i < 10; i++) {
    if (a[i] > m)//若数组中元素大于这个数,就插入于此,这位置之后的数都向后移动一个单位
    {
				temp1 = a[i];//保存第i个位置的数值
				a[i] = m;//将新输入的数插入到第i个位置
				for (j = i + 1; j < 11; j++) {
					temp2 = a[j];
					a[j] = temp1;
					temp1 = temp2;
				}//将i之后的元素向后移动一个单位
				break;
			}
		}
	}
	printf("The new array is:");
	for (i = 0; i < 11; i++) {
		printf("%3d", a[i]);
	}
	return 0;
}
//转载于@程序猿群哥@度小编

(二)删(无序数组删除某个指定元素):

方法一:遍历法


int main()
{
	int arr[]={1,2,3,4,5,6,6};
	int delect =0;
	int i=0,j=0,k=0;
	int n;//n为数组长度
	
	n=sizeof(arr)/sizeof(int);
	printf("删除前数组为:");
	for (k=0;k<=n-1;k++)
	{
		printf("%4d",arr[k]);
	 }
	 printf("/n") ;
	 printf("please input the number you want to delect");
	 scanf("%d",&delect);
	 for (i=0;i<=n-1;i++){
	 	if(delect ==arr[i])
	 	{
	 		for(j=i;j<+n;j++)
	 		{
	 			arr[j]=arr[j+1];//实现数的覆盖 
			 }
		 }
	 }
	 printf("删除后的数组为");
	 for(k=0;k<=n-2;k++)
	 {
	 	printf ("%4d",arr[k]);
	 	
	  } 
	  printf("\n");
	  return 0;
}//转载于@topicstudy

方法二:记录元素下标

#include<stdio.h>
int main()
{
	int arr[]={1,3,6,5,4,};//4后面还有一个,的意思是数组是动态长度吗? 
	int delect=0;
	int delectIndex=0;
	int i=0;//非循环嵌套,可以只定义一个
	int n ;
	n=sizeof(arr)/sizeof(int);
	printf("Original array:") ;
	for (i=0;i<=n-1;i++){
		printf("%4d",arr[i]);
	}
	printf("\n");
	
	printf("please input the number you want to delect:");
	scanf("%d",&delect);
	for(i=0;i<=n-1;i++){
		if(delect==arr[i])
		delectIndex=i;//记录要删除的元素的下标 
	}
	for(i= delectIndex;i<=n-2;i++) {
	    arr[i]=arr[i+1];//后面的元素顺位往前移动 
	}
printf("The deleted array is:");
for (i=0;i<=n-2;i++)
{
	printf("%4d",arr[i]);
}
printf("\n");
return 0;

}
//转载于@topicstudy

以上代码存在bug:如果输入的元素在数组里面不存在,会自动删除a[0].

(三)查找元素是否存在

#include<stdio.h>
void input(int array[10],int n);
int find(int array[10],int n);

int main()
{
	int array[10]={0};
	int i, n, h;
	do
	{
		printf("please input the whole numbers-n(0<n<10):\n");
		scanf("%d",&n);
	}while (n<0||n>10);
	input (array,n);
	h= find(array,n);
	
}

void input(int array[10],int n)/*函数功能:输入元素*/
{
	int i;
	printf("请输入%d个数组元素:\n",n);
	for (i=0;i<n;i++)
		scanf("%d",&array[i]);
}

int find(int array[10],int n)/*函数功能:寻找元素,如果找到,flag变为1,然后输出该元素*/
{
	int a,b,i,flag;
	flag=-1;
	printf("请输入你所寻找的元素:\n");
	scanf("%d",&a);
	for (i=0;i<n;i++)
		if(a==array[i])
		   flag=i+1;
		return flag;
}//转载于@保温杯拖把风扇

(四)改指定位置的元素的数值

#include<stdio.h>
int main(void){
	int i;
	int num[]={1,2,4};
	num[2]= 120;//位置在2,及数组的第3个元素
	for(i=0;i<3;i++)
    printf("%d ",num[i]);
	} 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝红茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值