欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言按照索引插入并查找元素的实现教程

程序员文章站 2022-05-24 19:05:04
//我觉得代码基本上都有注释,我也不知道解释什么,有不懂的可以给我发留言; #include #define LEN 30 typedef struct { int in...

//我觉得代码基本上都有注释,我也不知道解释什么,有不懂的可以给我发留言;

#include

#define LEN 30

typedef struct

{

int index; //索引值;

int start; //开始位置;

int length; //子表长度;

}Index_Table;

//定义主表数据;

int Master[LEN]=

{

101,102,103,104,105,106,107,108, 0, 0,

111,112,113,114,115,116,117, 0, 0, 0,

211,212,213,214,215,216, 0, 0, 0, 0

};

//定义索引表;

Index_Table Table[3]=

{

{10, 0, 8},

{11,10, 7},

{21,20, 6}

};

//按索引查找;

int IndexSearch(int key)

{

int start,length;

for(int i=0;i<3;i++) //在索引表中查找索引值;

{

if(Table[i].index==key/10) //找到索引值并计算索引值;;

{

start=Table[i].start; //获取数组开始序号;

length=Table[i].length; //获取元素的长度;

break; //跳出循环;

}

}

if(i>=3)

return -1; //索引表中查找失败;

for(i=start;i if(Master[i]==key) //找到关键字;

return i; //返回序号;

}

//插入一个新的关键字;

int InsertNode(int key)

{

int start,length;

for(int i=0;i<3;i++) //在索引表中查找索引值;

{

if(Table[i].index==key/10) //计算索引值;

{

start=Table[i].start; //获取数组开始的序号;

length=Table[i].length; //获取元素长度;

break;

}

}

if(i>=3)

return -1; //索引表中查找失败;

Master[start+length]=key; //保存关键字到主表;

Table[i].length++; //修改索引表的子表长度;

return 0;

}

int main(void)

{

long key;

int i,pos;

printf("原数据:");

for(i=0;i {

if(!(i%10))

printf("\n");

printf("%d ",Master[i]);

}

printf("\n\n");

printf("输入要查找的关键字:");

scanf("%d",&key);

pos=IndexSearch(key);

if(pos>-1)

printf("查找成功,该关键字的索引位置(即下标)为: %d",pos);

else

printf("查找失败!!!");

printf("\n\n");

printf("输入要插入的关键字: ");

scanf("%d",&key);

printf("\n");

if(InsertNode(key)==-1)

printf("插入失败!!!");

else

{

printf("插入关键字后的数据为:");

for(i=0;i {

if(!(i%10))

printf("\n");

printf("%d ",Master[i]);

}

printf("\n");

}

printf("\n");

return 0;

}

//输出截图;

C语言按照索引插入并查找元素的实现教程