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

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

   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[n]);
  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[n]<min)
  46:             {
  47:                 min=arr[n];
  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[n]=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[n]=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[n]>s&&arr[n]<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[n]>s&&arr[n]<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: }
posted on 2011-08-26 22:33  妞妞的学习历程  阅读(403)  评论(0编辑  收藏  举报