編寫函數:有序序列插入數據 之二 已有一個按遞增序排列的正整數序列Array,其中任意兩個元素都不同?,F要將一正整數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
提交
取消