想要编写一个函数:关于有序序列插入数据,请问该怎么实现?

已有一个按递增序排列的正整数序列Array,其中任意两个元素都不同。现要将一正整数Key插入到序列Array中,并且依然保持Array的递增序。在此过程中,按判定顺序有可能出现以下几种情况:

1. 序列Array已经达到其容量上界;

2. 序列Array中已经有与Key相等的元素存在;

3.
序列Array既没有满,也没有与Key相等的元素,则Key可以插入序列Array之中,应获得其Key插入序列Array后所在的下标(从0开始)。

-----------------------------------------------------------------------------

编写函数getarray()、insert()和result():

原型:int getarray(int array[]);

功能:按输入格式读取一个序列,存放到整型数组array[]里。

原型:int insert(int array[], int key, int vol);

功能:将key插入到整型数组array[]里,vol是array[]容量上限。根据题意描述的三种情况返回不同的值(你自己设计)。

原型:int result(int flag);

功能:结合insert()函数的返回值,根据输出格式和参数flag,产生不同的输出。

函数的调用格式见“Append Code”。

Input

输入的一个数是M,表示后面有M组测试数据。

每组测试数据有两部分组成:2行输入。第一部分是序列Array中的元素,最多不超过1000个,当读到0时表示序列输入结束。第二部分是一个正整数key。

Output

输出为M行,每一行代表上述每一组输入的插入结果。其中:

如果存放序列的数组已满,则输出:“The array if full!”

如果序列中已经有Key,则输出:“The key is already in this array!”

如果Key可以插入Array,则输出:“The key is inserted in position x”. 其中x是Key插入数组后的下标。

Sample Input

3
1 2 3 0
2
1 2 4 5 6 7 8 9 10 0
3
Sample Output

The key is already in this array!
The
key is inserted in position 2.
主函数为
int main()
{
int array[MAX_SIZE], cases, i, key;
scanf("%d", &cases);
for(i = 1; i <= cases; i++)
{
getarray(array);
scanf("%d", &key);
result(insert(array, key, MAX_SIZE - 1));
}
return 0;
}

皈依舞
浏览 223回答 2
2回答

慕田峪9158850

#include&nbsp;<stdio.h>#define&nbsp;MAX_SIZE&nbsp;1000int&nbsp;getarray(int&nbsp;array[]){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;while(scanf("%d",&nbsp;&array[i])&nbsp;==&nbsp;1&nbsp;&&&nbsp;array[i++])&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}int&nbsp;insert(int&nbsp;array[],&nbsp;int&nbsp;key,&nbsp;int&nbsp;vol){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,&nbsp;j;&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;vol;&nbsp;i&nbsp;++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!array[i])&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;if(i&nbsp;==&nbsp;vol)&nbsp;return&nbsp;-1;//full&nbsp;&nbsp;&nbsp;&nbsp;for(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;<&nbsp;i;&nbsp;j&nbsp;++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(array[j]&nbsp;==&nbsp;key)&nbsp;return&nbsp;-2;&nbsp;//already&nbsp;exist&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(array[j]&nbsp;>&nbsp;key)&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;j;}int&nbsp;result(int&nbsp;flag){&nbsp;&nbsp;&nbsp;&nbsp;if(flag&nbsp;==&nbsp;-1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("The&nbsp;array&nbsp;if&nbsp;full!\n");&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(flag&nbsp;==&nbsp;-2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("The&nbsp;key&nbsp;is&nbsp;already&nbsp;in&nbsp;this&nbsp;array!\n");&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("The&nbsp;key&nbsp;is&nbsp;inserted&nbsp;in&nbsp;position&nbsp;%d\n",&nbsp;flag);&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}int&nbsp;main()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;array[MAX_SIZE],&nbsp;cases,&nbsp;i,&nbsp;key;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&cases);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;<=&nbsp;cases;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getarray(array);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&key);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result(insert(array,&nbsp;key,&nbsp;MAX_SIZE&nbsp;-&nbsp;1));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;}

郎朗坤

#include<stdio.h>#include<string.h>#define MAX_SIZE 1001int getarray(int array[]){int j=0;scanf("%d",&array[j]);while (array[j]!=0){j++;scanf("%d",&array[j]);}return 0;}int insert(int array[],int key,int vol){int i;for(i=0; i<=vol; i++){if(array[vol]==0)return -1;else{if(key==array[i])return -2;else{if(key<array[0])return 0;if(key>array[i]&&key<array[i+1])return i+1;if(key>array[i]&&array[i+1]==0)return i+1;}}}}void result(int flag){if (flag==-1)printf("The array if full!");else if (flag==-2)printf("The key is already in this array!\n");elseprintf("The key is inserted in position %d.\n",flag);}int main(){int array[MAX_SIZE], cases, i, key;scanf("%d", &cases);for(i = 1; i <= cases; i++){getarray(array);scanf("%d", &key);result(insert(array, key, MAX_SIZE - 1));}return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP