标签:success 判断 \n == data 数组元素 重复 限制 添加
1 #include<stdio.h> 2 #include<stdlib.h> //atoi()函数头文件 3 #include<string.h> 4 int Exist(int a[],int n,int w)//数组中是否存在某元素 5 { 6 int i; 7 for(i=0;i<n;i++) 8 { 9 if(a[i]==w) 10 return i;//若存在,返回下标值 11 } 12 13 return 0;//不存在,返回0 14 } 15 16 int Max(int a[],int n)//求数组的最大值 17 { 18 int i; 19 int max=a[0]; 20 for(i=0;i<n;i++) 21 { 22 if(a[i]>max) 23 max=a[i]; 24 } 25 return max;//返回最大值 26 } 27 28 int New(int a[],int n)//新建 29 { 30 int i; 31 if(Max(a,n)==0)//若最大值为0,则表示无文件 32 { 33 a[n]=1;//数组末添加元素 34 return 1;//添加成功 35 } 36 else//最大值不为0,表示有文件 37 { 38 for(i=1;i<=Max(a,n);i++)//判断区间[1,max]是否连续? 39 { 40 if(Exist(a,n,i)==0)//如果有断层 41 { 42 a[n]=i; //将缺少的文件编号 添加到数组末 43 return i; //返回编号 44 } 45 } 46 a[n]=Max(a,n)+1; //若区间连续无断层,编号加一,添加元素 47 return Max(a,n)+1; //返回编号 48 } 49 } 50 51 int Delete(int a[],int n,int w)//删除 52 { 53 int i; 54 if(Max(a,n)==0) 55 return 0; //若无文件,删除失败 56 else 57 { 58 if(Exist(a,n,w)!=0)//有文件,且存在编号 59 { 60 a[Exist(a,n,w)]=0;//将该编号文件删除 61 return 1; //删除成功 62 } 63 return 0;//有文件,但不存在欲删除的文件编号,删除失败 64 } 65 } 66 67 int main() 68 { 69 int n,d,m,i,k=0;//n行数 70 int a[1500]={0};//a文件编号数组,初始化为0 71 char b[20],c[4];//b用于存放输入指令字符,c存放Delete n 指令的n 72 73 scanf("%d",&n);//输入行数 74 m=n;//新建操作含n++,防止影响循环判断 75 while(k++ <= m && gets(b)!=NULL)//先判断再输入 当前行++ <= 总行数 输入不为空 76 { 77 if(strcmp(b,"New")==0)//strcmp(str1,str2),判断字符串是否相等,相等返回0 78 { 79 n++;//数组长度加一 80 printf("%d\n",New(a,n));//输出新建结果 81 } 82 83 else if(strncmp(b,"Delete",6)==0)//strncpy(str1,str2,n) 把str2从n位开始复制到str1 84 { 85 strncpy(c,b+7,strlen(b));//截取文件编号 86 int d=atoi(c);//atoi(str) 把字符串转换为整型 87 if(Delete(a,n,d)==1) 88 printf("Successful\n"); 89 else 90 printf("Failed\n"); 91 } 92 } 93 return 0; 94 }
若想进一步优化,可以使用动态数组,也可以借鉴Java里set集合的思想。
内存数组不可能无限制增大,可以考虑限制值为0的数组元素个数。
标签:success 判断 \n == data 数组元素 重复 限制 添加
原文地址:https://www.cnblogs.com/kaml8/p/10356069.html