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