数组的增删改反转(c语言)

数组的增删改反转(c语言),第1张

#include 
#include 
#include 
typedef struct Array
{
	int len;          //记录数组的长度 
	int num;         //记录数组使用的个数
	int *head;      //保存数组的首地址 
}A;       

/*******************************************************************************
* 函数名         : init_array()
* 函数功能		 : 初始化数组,给数组申请一定长度的地址空间,同时给数组使用大小的个数为0 
* 输入           : 结构体的地址,设置数组的长度 
* 输出         	 : 返回0
*******************************************************************************/
int init_array(A *arr,int len)
{
       arr->head=(int *)malloc(sizeof(int)*len);
	   //动态申请内存程序。申请了一个int型的地址(int*) 返回的是申请内存的首地址 
       if(NULL==arr){
              printf("Dynamic storage fail to distribute!");
              exit(-1);      //exit(0)表示程序正常退出;除了0之外,其他参数均代表程序异常退出 
       }
       //如果内存没有申请成功 程序异常退出 
       arr->len=len;
       arr->num=0;
       return 0;
} 

/*******************************************************************************
* 函数名         : isFull()
* 函数功能		 : 判断是否还有空位置 
* 输入           : 结构体的地址 
* 输出         	 : 返回1 or 0  
*******************************************************************************/
int isFull(A *arr){
       if(arr->num>=arr->len){   //比较数组使用个数与数组的长度 
              return 1;
       }else{
       	    return 0;
	   }
   
}          
/*******************************************************************************
* 函数名         : isEmpty()
* 函数功能		 : 判断是否为空数组 
* 输入           : 结构体的地址 
* 输出         	 : 返回1 or 0 
*******************************************************************************/ 
int isEmpty(A *arr){
       if(arr->num==0){   //判断数组的使用个数是否为0  
              return 1;
       }
       return 0;
}
/*******************************************************************************
* 函数名         : append()
* 函数功能		 : 为数组顺序依次赋值 
* 输入           : 结构体的地址 
* 输出         	 : 返回1、0 
*******************************************************************************/ 
int append(A *arr,int val){
       if(isFull(arr)){            //先判断数组是否有空位置 
              return 0;
       }else{
       arr->head[arr->num]=val;     //往数组的第num个地址的位置传入value @@@ 
       (arr->num)++;                //同时将数组使用的个数加1 
       }
       return 1;
}
/*******************************************************************************
* 函数名         : insert()
* 函数功能		 : 在指定位置插入值	
* 输入           : 结构体地址,数组第几个位置(下标位置),需要插入的值 
* 输出         	 : 返回1 
*******************************************************************************/
int insert(A *arr,int index,int val)
{
	if(isFull(arr))             //判断是否有位置 
	{
		return 0;
	}
	if(index<0&&index>arr->len-1) 
//判断插入的位置是否正确 (逻辑与)插入的位置是否大于数组的总长度-1 
	{
		return 0;
	}
	int temp =arr->len;  
//先定义一个变量保存没有改变前的数组长度
	while(temp>index)   
//原来数组的长度要大于插入的位置 
	{
		arr->head[temp]=arr->head[temp-1]; 
 //给数据的前一位赋值数据后一位的     循环数据后移一位  直到插入的位置为空 
		--temp;      //原来数组的长度减1 
	 } 
	 arr->head[index]=val; //插入要插入的值 
	 arr->num++;  //添加使用的次数
	 return 1;
}
/*******************************************************************************
* 函数名         : show_array()
* 函数功能		 : 显示打印遍历数组 
* 输入           :结构体的地址 
* 输出         	 : 
*******************************************************************************/
void show_array(A *arr)   
{
	int i;
	for(i=0;inum;i++)   //for循环遍历数组 
	{
		printf("%d",arr->head[i]);    
	}
	printf("\n");
}
/*******************************************************************************
* 函数名         : remove_array()
* 函数功能		 : 删除数组里面指定位置的元素 
* 输入           :结构体的地址 ,删除的指定位置 
* 输出         	 : 返回1,0   
*******************************************************************************/
int remove_array(A *arr,int index){
       if(arr->num<=0){              
 //判断数组里的个数是否为0 
              return 0;
       }
       if(index<0&&index>arr->num-1){
//判断删除的位置是否正确 (逻辑与)删除的位置是否大于数组的总长度-1 
              return 0;
       }
       int temp=index;
//先定义一个变量保存要删除位置的下标 
       while(tempnum-1){      
//判断删除的位置下标是否大于数组最后一个的下标 
              arr->head[temp]=arr->head[temp+1];
// 循环将后面的值往前移一位  直到循环结束 
              temp++;
       }
       --arr->num;  //将数组的使用个数减 1 
       return 1;
}
/*******************************************************************************
* 函数名         : inverse()
* 函数功能		 : 数组反转 
* 输入           :结构体的地址 
* 输出         	 : 返回1,0   
*******************************************************************************/
int inverse(A *arr){
       if(arr->num<=0){   //判断数组内个数是否大于1 
              return 0;
       }
       int temp=0;
       int temp2=arr->num;   // 定义一个变量temp2保存数组使用的个数 
       while(temp!=temp2){   //判断 temp 和 temp2 是否不相等 
              int x=arr->head[temp]; //定义一个中间变量保存数组的第一个值 
              arr->head[temp]=arr->head[temp2-1]; //将最后一个数组的值赋给第一个 
              arr->head[temp2-1]=x; //通过中间变量将数组中的第一个值赋给最后一个 
              temp++;   //依次将第二个和倒数第二个下标 规律++ 
              temp2--;
       }
       return 1;
}
/*******************************************************************************
* 函数名         :replace()
* 函数功能		 : 替换数组的元素 
* 输入           :结构体的地址,数组第几个位置,需要插入的值 
* 输出         	 : 返回1,0   
*******************************************************************************/
int replace(A * arr,int index,int val){
       if(arr->len<=0 || index<0 ||index >arr->num-1){
//逻辑或  数组长度小于等于0 或 替换位置小于0 或 替换位置超出数组的长度 
       return 0;
       }
       arr->head[index]=val;
       return 1;
}

int main (void)
{
	A a1;
	int x,y,z,l;
	printf("创建数组长度\n"); 
	printf("输入数组的长度:\n");
	scanf("%d",&x);
	init_array(&a1,x);
	while(1)
   {
   	printf("******************目前数组的状况如下*********************\n");
   	printf("********数组共有%d个存储空间,当前已经使用%d空间********\n",a1.len,a1.num);
   	printf("********************************************************\n");
   	printf("******************选择你需要的 *** 作*********************\n");
   	printf("                   1.数组的正常赋值                    \n");
   	printf("                   2.按位置插入赋值                    \n");
   	printf("                   3.按位置删除                        \n");
   	printf("                   4.更换元素的值                      \n");
    printf("                   5.把数组元素倒转                    \n");
   	printf("                   6.判断数组是否为空                  \n");
   	printf("                   7.判断数组是否还有存储空间           \n");
   	printf("                   8.退出程序                           \n");
	printf("---------------------------------------------------------\n");
	printf("                   输入你的选择:                          \n");
	scanf("%d",&y);
	switch(y)
	{
		case 1:
			printf("输入需要添加的值:");
			scanf("%d",&z);
			append(&a1,z);
			show_array(&a1); 
			break;
		case 2:			
		    printf("输入需要插入的位置0-%d:",a1.len-1);
			scanf("%d",&z);
			printf("输入需要添加的值%d:");
			scanf("%d",&l);
			insert(&a1,z,l);
			show_array(&a1); 
			break;
		case 3:
			printf("输入需要删除的位置0-%d:",a1.len-1);
			scanf("%d",&z);
			remove_array(&a1,z);
			show_array(&a1); 
			break;
		case 4:
			printf("输入需要更换的位置0-%d:",a1.len-1);
			scanf("%d",&z);
			printf("输入需要更换的值:");
			scanf("%d",&l);			
			replace(&a1,z,l);
			show_array(&a1); 
			break;
		case 5:
			printf("反转数组结果");
			inverse(&a1);
			show_array(&a1); 
			break;	
		case 6:
			printf("判断数组是否为空数组");
			printf("1代表是空数组;0代表不是空数组:%d\n",isEmpty(&a1));
			break;	
		case 7:
			printf("判断数组是否有存储位置");
			printf("1代表有存储位置;0代表没有存储位置:%d\n",isFull(&a1));
			break;
		case 8:
		    goto tiaochu; 
		}	      	
   }
tiaochu:
   	printf("程序结束");

 } 

后续会继续修改完善……

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/2889697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-14
下一篇 2022-09-14

发表评论

登录后才能评论

评论列表(0条)

保存