编写函数:有序序列插入数据 之二 已有一个按递增序排列的正整数序列Array,其中任意两个元素都不同。现要将一正整数Key插入到序列Array中,并且依然保持Array的递增序。在此过程中,按判定顺序有可能出现以下几种情况:1. 序列Array已经达到其容量上界;2. 序列Array中已经有与Key相等的元素存在;3. 序列Array既没有满,也没有与Key相等的元素,则Key可以插入序列Array之中,应获得其Key插入序列Array后所在的下标(从0开始)。编写函数getarray()、getkey()、insert()和result():原型:int getkey(int key[]);功能:按输入格式读取所有的待插入值,存放到整型数组key[]里,返回key[]中元素个数。原型: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时表示序列输入结束。第二部分开始是一个正整数N(N较小),后面跟着N个待插入Array中的正整数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插入数组后的下标 int main(){int array[MAX_SIZE], cases, ca, i, key[MAX_SIZE], size;scanf("%d", &cases);for(ca = 1; ca <= cases; ca++){getarray(array);size = getkey(key);printf("Case %d:\n", ca);for(i = 0; i < size; i++)result(insert(array, key[i], MAX_SIZE - 1));}return 0;}
1 回答
慕田峪7331174
TA贡献1828条经验 获得超13个赞
#include <stdio.h>
#include <stdio.h>
#define MAX_SIZE 1000
void getarray(int array[])
{
int i= 0;
for(i = 0; i < MAX_SIZE; i++)
{
scanf("%d",&array[i]);
if(array[i] == 0)
break;
}
;
}
int insert(int array[],int key,int vol)
{
int i, j;
for(i=0;i<vol;i++)
if(!array[i])
break;
if(i == vol)
return -1;
for(j=0;j<i;j++)
if(array[j]==key)
return -2;
else
if(array[j]>key) break;
return j;
}
int result(int flag)
{
if(flag==-1)
printf("The array if full!\n");
else if(flag==-2)
printf("The key is already in this array!\n");
else
printf("The key is inserted in position %d\n", flag);
return 0;
}
添加回答
举报
0/150
提交
取消