首页 > 其他分享 >函数实现一维数组基本操作

函数实现一维数组基本操作

时间:2023-12-14 22:32:20浏览次数:28  
标签:arr 一维 int void 查找 num 数组 printf 基本操作

论如何用一个代码实现一堆数字的排序,删除,插入,查找

这当然少不了我们在数组上的操作,将这些看成一个个小功能,接下来我们为了使结构直观,这里我用函数来实现这些功能

首先是声明

//功能 
void Function();
//排序 
void Sort(int i,int num);
//查找 
void Find(int z);
//插入 
void Insert(int x);
//删除 
void Delete(int y);

现在我们来一个一个分析,首先是排序

void Sort(int i,int num)		//num表示数的个数,i为数组下标
 {
 	int min=0,t=0,j;
 	for(i=0;i<num-1;i++)
 	{
 		min=i;									//借助min这个小标查找最小的数
		for(j=i+1;j<num;j++)
		{
		 if(arr[min]>arr[j])
		 {
		 min=j;									//min是大的时候就赋小的给它
		 }
		}
		 t=arr[i];							//交换i和min。实现排序
		 arr[i]=arr[min];
		 arr[min]=t;
				
	}
 	printf("排序后的顺序为:\n");
 	for(i=0;i<num;i++)
 	{
 	printf("%d\t",arr[i]);			//打印
	}
	printf("\n");
 }

这个函数就实现了数组的排序,接下来是插入

void Insert(int x)
 {
 	int j;
 	printf("请输入你要插入的数:\n");
 	scanf("%d",&x);
 	for(i=0;i<num;i++)
 	{
 		if(arr[i]>x)				//确定插入位置
 		{
 			break;
		 }
	 }
 	for(j=num-1;j>=i;j--)		//将确定x位置后的数全部后移动一位,腾出位置
 	{
 		arr[j+1]=arr[j];	
	}
	 arr[i]=x;							//再插入x
	 printf("插入%d后,新的顺序为:\n",x);
	 num++;									//注意插入一个数数组元素个数加一
	 for(i=0;i<num;i++)			//输出出来
	 {
	 	printf("%d\t",arr[i]);
	 }
	printf("\n");
 }

这个我们是默认从小到大的顺序才能插入,所以我们用这个函数之前记得先使用排序

完成后接下来是删除

void Delete(int y)
 {
 	int j;
 	printf("请输入你要删除的数:\n");
 	scanf("%d",&y);
 	for(i=0;i<=num;i++)
 	{
 		if(arr[i]==y)				//查找
 		break;
	 }
 	if(i>num)							//全都查一遍后i>num表示没有这个元素,提示不存在
 	printf("预删除的数不存在\n");
 	else
	 {
	 	for(j=i;j<num;j++)
	 	{
	 		arr[j]=arr[j+1];		//类似插入的逆过程
		 }
		 printf("删除%d后,新的顺序为:\n",y);
		 num--;								//少一个元素
		 for(i=0;i<num;i++)			
		 {
		 	printf("%d\t",arr[i]);
		 }
	  } 
	printf("\n");  
 }

删除元素前要查找到这个元素,所以我们这里间接完成了查找的函数,但这有一个bug,就是查找到一个后就break跳出了

void Find(int z)
 {
 	printf("请输入你要查找的数:\n");
 	scanf("%d",&z);
 	for(i=0;i<=num;i++)
 	{
 		if(arr[i]==z)
 		{
 		printf("查找成功,%d是第%d个数\n",z,i+1);
 		break; 
 		}
	}
 	if(i>num)
 	printf("您查找的数不存在\n");
}

这里意思一样,找到一个就跳出,

最后有意思的来了,原本这些函数可以直接使用在主函数中,但我想使用一个功能函数,可以选择这些功能随便使用,看下面:

void Function()
 {
 int x,y,z; 
 char input[10];				//定义一个字符串数组
 	printf("请选择您要进行的操作:\n");
 	printf("******0.排序******\n") ;
 	printf("******1.插入******\n") ;
 	printf("******2.查找******\n") ;
 	printf("******3.删除******\n") ;
 	printf("******4.退出******\n") ;
 	while(1)										//这让我们可以重复使用
 	{
 		begin:
	 	scanf("%s",input);				//这里判断是否功能选择正确,正确就调用
	 	if(strcmp(input,"排序")==0)
	 	{
	 		Sort(i,num);
		 }
	 	else if(strcmp(input,"插入")==0)
	 	{
	 		Insert(x); 
		 }
		 else if(strcmp(input,"查找")==0)
	 	{
	 		Find(z); 
		 }
		 else if(strcmp(input,"删除")==0)
	 	{
	 		Delete(y); 
		 }
		 else if(strcmp(input,"退出")==0)
	 	{
	 		break; 																//跳出很关键
		 }
		 else {																	//错误就提示重新选择
		 	printf("请勿选择无关操作,请重新选择\n");
		 	goto begin;														//goto的作用体现出来了
		 }
		 printf("请继续选择操作:\n");
	}
		 	printf("操作结束,感谢使用!\n");					//退出就结束
 }

这里制作了一个类似游戏主界面的调用功能函数,咳咳无聊敲的。

然后我们看主函数,我建议这里边看边想过程

int main ()
{
	printf("您要输入的数字个数为:\n") ;
	scanf("%d",&num) ;											//自定义数的个数
	printf("请输入%d个数字:\n",num);					//输入这些数
	for(i=0;i<num;i++) 
	{
		scanf("%d",&arr[i]);
	}
	
	Function();
	
	return 0;
 } 

我们这里灵活定义数的个数,然后用数组和循环实现数组初始化,也就是这些数的初始状态。

看完这里你是不是会想主函数里没定义num和i?先等等

让我们接着看总代码

//设计一个代码实现n个数的排序,插入,删除,查找。

#include<stdio.h>
#include<string.h> 													//功能中比较了字符串,使用字符串库函数

//功能 
void Function();
//排序 
void Sort(int i,int num);
//查找 
void Find(int z);
//插入 
void Insert(int x);
//删除 
void Delete(int y);
																					//这里我们整个代码都使用了num和i
	int num,i;															//所以我们定义它们为全局变量
	int arr[10000];													//数组也一样赋10000,控制长度足够

int main ()
{
	printf("您要输入的数字个数为:\n") ;
	scanf("%d",&num) ;
	printf("请输入%d个数字:\n",num);
	for(i=0;i<num;i++) 
	{
		scanf("%d",&arr[i]);
	}
	
	Function();
	
	return 0;
 } 
 
 
 void Sort(int i,int num)
 {
 	int min=0,t=0,j;
 	for(i=0;i<num-1;i++)
 	{
 		min=i;
		for(j=i+1;j<num;j++)
		{
		 if(arr[min]>arr[j])
		 {
		 min=j;	
		 }
		}
		 t=arr[i];
		 arr[i]=arr[min];
		 arr[min]=t;
				
	}
 	printf("排序后的顺序为:\n");
 	for(i=0;i<num;i++)
 	{
 	printf("%d\t",arr[i]);
	}
	printf("\n");
 }
 
 void Insert(int x)
 {
 	int j;
 	printf("请输入你要插入的数:\n");
 	scanf("%d",&x);
 	for(i=0;i<num;i++)
 	{
 		if(arr[i]>x)
 		{
 			break;
		 }
	 }
 	for(j=num-1;j>=i;j--)
 	{
 		arr[j+1]=arr[j];	
	}
	 arr[i]=x;
	 printf("插入%d后,新的顺序为:\n",x);
	 num++;
	 for(i=0;i<num;i++)
	 {
	 	printf("%d\t",arr[i]);
	 }
	printf("\n");
 }
 
 
 void Delete(int y)
 {
 	int j;
 	printf("请输入你要删除的数:\n");
 	scanf("%d",&y);
 	for(i=0;i<=num;i++)
 	{
 		if(arr[i]==y)
 		break;
	 }
 	if(i>num)
 	printf("预删除的数不存在\n");
 	else
	 {
	 	for(j=i;j<num;j++)
	 	{
	 		arr[j]=arr[j+1];
		 }
		 printf("删除%d后,新的顺序为:\n",y);
		 num--;
		 for(i=0;i<num;i++)
		 {
		 	printf("%d\t",arr[i]);
		 }
	  } 
	printf("\n");  
 }
 
 
 void Find(int z)
 {
 	printf("请输入你要查找的数:\n");
 	scanf("%d",&z);
 	for(i=0;i<=num;i++)
 	{
 		if(arr[i]==z)
 		{
 		printf("查找成功,%d是第%d个数\n",z,i+1);
 		break; 
 		}
	}
 	if(i>num)
 	printf("您查找的数不存在\n");
}
 
 void Function()
 {
 int x,y,z; 
 char input[10];
 	printf("请选择您要进行的操作:\n");
 	printf("******0.排序******\n") ;
 	printf("******1.插入******\n") ;
 	printf("******2.查找******\n") ;
 	printf("******3.删除******\n") ;
 	printf("******4.退出******\n") ;
 	while(1)
 	{
 		begin:
	 	scanf("%s",input);
	 	if(strcmp(input,"排序")==0)
	 	{
	 		Sort(i,num);
		 }
	 	else if(strcmp(input,"插入")==0)
	 	{
	 		Insert(x); 
		 }
		 else if(strcmp(input,"查找")==0)
	 	{
	 		Find(z); 
		 }
		 else if(strcmp(input,"删除")==0)
	 	{
	 		Delete(y); 
		 }
		 else if(strcmp(input,"退出")==0)
	 	{
	 		break; 
		 }
		 else {
		 	printf("请勿选择无关操作,请重新选择\n");
		 	goto begin;
		 }
		 printf("请继续选择操作:\n");
	}
		 	printf("操作结束,感谢使用!\n");
 }

接下来就是运行了,让我们看看:

您要输入的数字个数为:
10
请输入10个数字:
10 9 8 7 6 5 4 3 2 1
请选择您要进行的操作:
******0.排序******
******1.插入******
******2.查找******
******3.删除******
******4.退出******
排序
排序后的顺序为:
1       2       3       4       5       6       7       8       9       10
请继续选择操作:
插入
请输入你要插入的数:
11
插入11后,新的顺序为:
1       2       3       4       5       6       7       8       9       10      11
请继续选择操作:
删除
请输入你要删除的数:
1
删除1后,新的顺序为:
2       3       4       5       6       7       8       9       10      11
请继续选择操作:
查找
请输入你要查找的数:
11
查找成功,11是第10个数
请继续选择操作:
查找
请输入你要查找的数:
12
您查找的数不存在
请继续选择操作:
退出
操作结束,感谢使用!

--------------------------------
Process exited after 123.2 seconds with return value 0
请按任意键继续. . .

这里我选择10个数字,分别是1 2 3 4 5 6 7 8 9 10 

然后选择排序,结果如上所示

再选择插入11和删除1的操作,同样看到上面

然后查找11和12,11显示成功和所在位置,12显示不存在,如上所示

最后退出,提示结束

当然也可以继续使用功能,这里就你们自己去玩玩吧

最后像上面说的,这个代码还有很多不足,但也足够实现功能,实现的方法也多种多样

试试看其他方法,也可以改进功能,来完善它吧!

标签:arr,一维,int,void,查找,num,数组,printf,基本操作
From: https://blog.51cto.com/u_16425819/8824183

相关文章

  • 代码随想录算法训练营第二天| LeetCode977.有序数组的平方、209.长度最小的子数组、59
    LeetCode977.有序数组的平方●今日学习的文章链接和视频链接代码随想录(programmercarl.com) 题目链接977.有序数组的平方-力扣(LeetCode) ●自己看到题目的第一想法昨天正好做了这道题目,总体来说就是用双指针法,要么从绝对值最小的数开始排序,要么从绝对值最大的数开......
  • 代码随想录算法训练营第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵
    LeetCode977有序数组的平方题目链接:977.有序数组的平方思路:双指针,由两侧向中间逼近 LeetCode 209.长度最小的子数组题目链接:209.长度最小的子数组思路:滑动窗口,关键点滑动窗口起始点和终止点位置关系的确定 LeetCode 59.螺旋矩阵题目链接:59.螺旋矩阵关键点:循环处理......
  • java基础语法之一维数组的应用案例
    一:概述在前面已经介绍了一维数组的相关语法知识,下面来讲一下具体案例的实现。二:具体说明<1>数组的遍历数组遍历指的是:获取数组中的每一个元素,我们可以把获取到的元素输出在控制台具体代码和运行截图如下:publicstaticvoidmain(String[]args){//定义数组并初始化......
  • 对象的数据处理方法,要对对象属性进行数组操作(list数组中每一项与column数组中的valu
       //需要对对象属性进行数组操作时,使用Object.entries()方法    varlist=['V11046_052','V11046_051','V11046_50','V11046_0511'];    varcolumn=[{'观测时间':'D_DATETIME'},{'小时内极大风速出现时间':'V......
  • 稀疏数组
    https://blog.csdn.net/baolingye/article/details/99943083packagecom.chen.Two;/***@authorChen*@date2023年12月14日11:05*/publicclassSparseArray{publicstaticvoidmain(String[]args){int[][]array1=newint[11][11];//起始数组......
  • 编写一个程序,记录捐助给“维护合法权利团体”的资金。该程序要求用户输入捐献者数目,然
    编写一个程序,记录捐助给“维护合法权利团体”的资金。该程序要求用户输入捐献者数目,然后要求用户输入每一个捐献者的姓名和款项。这些信息被储存在一个动态分配的结构数组中。每个结构有两个成员:用来储存姓名的字符数组(或string对象)和用来存储款项的double成员。读取所有的......
  • 力扣146 螺旋遍历二维数组
    Problem: LCR146.螺旋遍历二维数组思路多个循环螺旋模拟classSolution{public:vector<int>spiralArray(vector<vector<int>>&array){vector<int>res;intm=array.size();if(m==0){returnres;}......
  • C++基础 -6- 二维数组,数组指针
    ———————二维数组,数组指针——————— ......
  • leetcode 209. 长度最小的子数组
    题目:209.长度最小的子数组题目描述:给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。我的思路:这道题目暴力......
  • 238题:除自身以外数组的乘积
    238题:除自身以外数组的乘积写作背景:由于最近在练习leetcode,这道题刚开始思路不太清晰,所以将自己的解题思路记录下来,以便后续复习。题目描述:给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之......