为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP C
皈依舞 2022-04-13 15:11:19
已有一个按递增序排列的正整数序列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 Input31 2 3 021 2 4 5 6 7 8 9 10 03Sample OutputThe key is already in this array!Thekey 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;}
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

#include <stdio.h>#define MAX_SIZE 1000int getarray(int array[]){    int i = 0;    while(scanf("%d", &array[i]) == 1 && array[i++]) ;    return 0;}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;//full    for(j = 0; j < i; j ++)        if(array[j] == key) return -2; //already exist        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;}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; }

查看完整回答
反对 回复 2022-04-19
?
郎朗坤

TA贡献1921条经验 获得超9个赞

#include<stdio.h>
#include<string.h>
#define MAX_SIZE 1001
int 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");
else
printf("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;
}



查看完整回答
反对 回复 2022-04-19
  • 2 回答
  • 0 关注
  • 222 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号