第二天:数组的插入,删除和简单的排序
2011-08-26 22:33
387 查看
这是我从考研书上看见的题目,书上只是要求写出算法,但是我感觉还是用程序实现了比较踏实,所以就又写出来和大家分享了哟!不过我男朋友说我写的不够完美,他非得明天教我重构一下,就凑合着答应他吧。不过他也是个半瓶子水平,不知道能告诉我什么。下次我回给出重构以后的程序,并且告诉大家我的重构过程。
[/code]
[/code]
[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]
相关文章推荐
- 三种最简单基础的排序 选择排序 冒泡排序 直接插入排序 运用了函数指针数组
- javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)
- javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 【LintCode 简单】100. 删除排序数组中的重复数字
- c语言心得-----数组中对元素的操作排序,查找,插入,和删除
- 排序之简单插入排序(数组)
- 【LintCode 简单】101. 删除排序数组中的重复数字 II
- 大二 第一次数据结构作业 (数组的排序,删除,查找,插入,合并)(线性表)
- LintCode【简单】101. 删除排序数组中的重复数字 II。代码及思路
- LintCode【简单】100. 删除排序数组中的重复数字。代码及思路
- 转 :asp教程.net c#数组遍历、排序、删除元素、插入、随机元素 数组遍历
- 关于数组的插入与删除以及排序
- swift object-c 数组插入,排序,删除对比
- 数据结构与算法之--简单排序:冒泡、选择和插入
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
- LintCode【简单】6. 合并排序数组 II,9. Fizz Buzz 问题。代码及思路 ——【vector用法】
- java数组、字符串比较插入及排序问题
- 【初级算法】1.从排序数组中删除重复项
- 排序(1)--冒泡,简单选择,快速,简单插入