码迷,mamicode.com
首页 > 其他好文 > 详细

5.4 索引查找

时间:2016-07-19 09:10:54      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

5.4 索引查找

标签:

原文地址:http://www.cnblogs.com/wozixiaoyao/p/5683176.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!