您的位置:首页 > 其它

第二天:数组的插入,删除和简单的排序

2011-08-26 22:33 387 查看
这是我从考研书上看见的题目,书上只是要求写出算法,但是我感觉还是用程序实现了比较踏实,所以就又写出来和大家分享了哟!不过我男朋友说我写的不够完美,他非得明天教我重构一下,就凑合着答应他吧。不过他也是个半瓶子水平,不知道能告诉我什么。下次我回给出重构以后的程序,并且告诉大家我的重构过程。


[code]
[code]   1: #include "stdio.h"


2: #include "stdlib.h"


3: #define  MaxSize 50


4:


5: //给数组赋值


6: void CreateList(int *arr,int &length)


7: {


8:     int temp;


9:     length=0;


10:     printf("请输入元素值,若输入的数值大于100,则自动结束:\n");


11:     scanf("%d",&temp);


12:     while (temp<=100)


13:     {


14:         arr[length]=temp;


15:         length++;


16:         scanf("%d",&temp);


17:     }


18: }


19:


20: //数组的输出


21: void OutPut(int *arr,int &length)


22: {


23:     printf("该数组中元素有:\n");


24:     for (int n=0;n<length;n++)


25:     {


26:         printf("%d ",arr
);


27:     }


28:     printf("\n");


29: }


30:


31: //从数组中删除最小值元素并返回其值,由最后一个元素填补空位


32: int DeleteTheMin(int *arr,int &length)


33: {


34:     int min=arr[0];


35:     int flag;


36:     if (length==0)


37:     {


38:         printf("该表为空!\n");


39:         return 0;


40:     }


41:     else


42:     {


43:         for(int n=0;n<length;n++)


44:         {


45:             if(arr
<min)


46:             {


47:                 min=arr
;


48:                 flag=n;


49:             }


50:         }


51:         arr[flag]=arr[length-1];


52:         length--;


53:         printf("删除最小值后新数组为:\n");


54:         OutPut(arr,length);


55:         return min;


56:     }


57: }


58:


59: //从数组中删除第i个元素,并返回删除元素的值


60: int DeleteTheINum(int *arr,int &length)


61: {


62:     int i;


63:     int temp;


64:     printf("请输入要所要删除的元素的位置:");


65:     scanf("%d",&i);


66:     if (i<1||i>length)


67:     {


68:         printf("所删元素的位置不存在!\n");


69:         return 0;


70:     }


71:     else


72:     {


73:         temp=arr[i-1];


74:         for(int n=i-1;n<length-1;n++)


75:         {


76:             arr
=arr[n+1];


77:         }


78:         length--;


79:         OutPut(arr,length);


80:         return temp;


81:     }


82: }


83:


84: //在数组中第i个位置插入一个元素x


85: void InsertTheNum(int *arr,int &length)


86: {


87:     int x;


88:     int i;


89:     int n;


90:     printf("请输入要插入的元素的位置和数值:");


91:     scanf("%d%d",&i,&x);


92:     if (i<1||i>length)


93:     {


94:         printf("您所插入的位置不正确!\n");


95:     }


96:     else


97:     {


98:         for (n=length;n>length-i;n--)


99:         {


100:             arr
=arr[n-1];


101:         }


102:         arr[n+1]=x;


103:         length++;


104:     }


105:     OutPut(arr,length);


106: }


107:


108: //删除数组中在s与t之间的元素


109: void DeleteSomeNum(int *arr,int &length)


110: {


111:     int s,t;


112:     int flag=0;


113:     printf("请输入s和t的值,需令s<t:");


114:     scanf("%d%d",&s,&t);


115:     if(s>t||t<0)


116:     {


117:         printf("输入的数值有误!\n");


118:     }


119:     else


120:     {


121:         for(int n=0;n<length;n++)


122:         {


123:             if (arr
>s&&arr
<t)


124:             {


125:                 for(int cu=n;cu<length;cu++)


126:                 {


127:                     arr[cu]=arr[cu+1];


128:                 }


129:                 length--;


130:                 flag++;


131:             }


132:         }


133:     }


134:     if (flag==0)


135:     {


136:         printf("数组中不存在此范围的元素\n!");


137:     }


138:     else


139:     {


140:         OutPut(arr,length);


141:     }


142: }


143:


144: //数组从小到大排序


145: void SortArray(int *arr,int &length)


146: {


147:     int temp;


148:     int i,j=0;


149:     for (i=0;i<length-1;i++)


150:     {


151:         for (j=i+1;j<length;j++)


152:         {


153:             if (arr[i]>arr[j])


154:             {


155:                 temp=arr[i];


156:                 arr[i]=arr[j];


157:                 arr[j]=temp;


158:             }


159:         }


160:     }


161: }


162: //从有序表中删除s与t之间的元素


163: void DeleteSeqNum(int *arr,int &length)


164: {


165:     int s,t;


166:     int flag;


167:     int count=0;


168:     SortArray(arr,length);


169:     printf("请输入s和t的值,需令s<t:");


170:     scanf("%d%d",&s,&t);


171:     if(s>t||t<0)


172:     {


173:         printf("输入的数值有误!\n");


174:     }


175:     else


176:     {


177:         for(int n=0;n<length;n++)


178:         {


179:             if (arr
>s&&arr
<t)


180:             {


181:                 flag=n;


182:                 count++;


183:             }


184:         }


185:         flag=flag-count+1;


186:         for (int i=0;i<length-flag-count;i++)


187:         {


188:             arr[flag+i]=arr[flag+i+count];


189:


190:         }


191:         length-=count;


192:         if (count==0)


193:         {


194:             printf("数组中不存在此范围的元素!\n");


195:         }


196:         else


197:         {


198:             OutPut(arr,length);


199:         }


200:     }


201: }


202:


203: int main()


204: {


205:     int arr[MaxSize];


206:     int length=0;


207:     int choice;


208:     CreateList(arr,length);


209:     printf("请输入0,1,2,3,4中的一个选项对数组进行操作,以#为结束标志:");


210:     scanf("%d",&choice);


211:     getchar();


212:     while (choice!=100)


213:     {


214:         switch(choice)


215:         {


216:         case 0:


217:             DeleteTheMin(arr,length);


218:             break;


219:         case 1:


220:             DeleteTheINum(arr,length);


221:             break;


222:         case 2:


223:             InsertTheNum(arr,length);


224:             break;


225:         case 3:


226:             DeleteSomeNum(arr,length);


227:             break;


228:         case 4:


229:             DeleteSeqNum(arr,length);


230:         }


231:         printf("请继续输入选项:");


232:         scanf("%d",&choice);


233:         getchar();


234:     }


235:     return 0;


236: }

[/code]
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐