5-5 IndexSearch.c
1 #include <stdio.h> 2 #define INDEXTABLE_LEN 3 3 #define TABLE_LEN 30 4 typedef struct item 5 { 6 int index; //索引值 7 int start; //开始位置 8 int length; //子表长度 9 }INDEXITEM; 10 //定义主表数据 11 long stu[TABLE_LEN]={ 12 1080101,1080102,1080103,1080104,1080105,1080106,0,0,0,0, 13 1080201,1080202,1080203,1080204,0,0,0,0,0,0, 14 1080301,1080302,1080303,1080304,0,0,0,0,0,0}; 15 //定义索引表 16 INDEXITEM indextable[INDEXTABLE_LEN]={ 17 {10801,0,6}, 18 {10802,10,4}, 19 {10803,20,4}}; 20 int IndexSearch(int key) //按索引查找 21 { 22 int i,index1,start,length; 23 index1=key/100;//计算索引值 24 for(i=0;i<INDEXTABLE_LEN;i++) //在索引表中查找索引值 25 { 26 if(indextable[i].index==index1) //找到索引值 27 { 28 start=indextable[i].start; //获取数组开始序号 29 length=indextable[i].length; //获取元素长度 30 break; //跳出循环 31 } 32 } 33 if(i>=INDEXTABLE_LEN) 34 return -1;//索引表中查找失败 35 for(i=start;i<start+length;i++) 36 { 37 if(stu[i]==key) //找到关键字 38 return i; //返回序号 39 } 40 return -1; //查找失败,返回-1 41 } 42 int InsertNode(key) 43 { 44 int i,index1,start,length; 45 index1=key/100;//计算索引值 46 for(i=0;i<INDEXTABLE_LEN;i++) //在索引表中查找索引值 47 { 48 if(indextable[i].index==index1) //找到索引值 49 { 50 start=indextable[i].start; //获取数组开始序号 51 length=indextable[i].length; //获取元素长度 52 break; //跳出循环 53 } 54 } 55 for(i=0;i<INDEXTABLE_LEN;i++) //在索引表中查找索引值 56 { 57 if(indextable[i].index==index1) //找到索引值 58 { 59 start=indextable[i].start; //获取数组开始序号 60 length=indextable[i].length; //获取元素长度 61 break; //跳出循环 62 } 63 } 64 if(i>=INDEXTABLE_LEN) 65 return -1;//索引表中查找失败 66 stu[start+length]=key;//保存关键字到主表 67 indextable[i].length++;//修改索引表中的子表长度 68 return 0; 69 } 70 71 int main() 72 { 73 long key; 74 int i,pos; 75 printf("原数据:"); 76 for(i=0;i<TABLE_LEN;i++) 77 printf("%ld ",stu[i]); 78 printf("\n"); 79 printf("输入查找关键字:"); 80 scanf("%ld",&key); 81 pos=IndexSearch(key); 82 if(pos>0) 83 printf("查找成功,该关键字位于数组的第%d个位置。\n",pos); 84 else 85 printf("查找失败!\n"); 86 printf("输入插入关键字:"); 87 scanf("%ld",&key); 88 if(InsertNode(key)==-1) 89 printf("插入数据失败!\n"); 90 else 91 { 92 for(i=0;i<TABLE_LEN;i++) 93 printf("%ld ",stu[i]); 94 printf("\n"); 95 } 96 getch(); 97 return 0; 98 }
时间: 2024-10-26 02:52:28