关键字索引搜索

假定关键字的值是不同的小整数。在这种情况下,最简单的搜索算法是对存储在数组中的数据项进行排序,并按关键字进行索引。下面给出这种思想的伪代码:

NULLitem 表示空项

Item 表示数据项的类型。

 

static Item *st;

static int M = maxKey; //最大项

 

void STinit( int maxN )

{

       Inti;

       st= malloc((M+1)*sizeof(Item));

       for(i=0; i<= M; i++)

              st[i]= NULLitem;

}

 

int Stcount()

{

       Inti,N=0;

      for( i=0; i< M;i++)

              if(st[i]!= NULLitem)

                     N++;

       returnN;

}

void STinsert(Item item)

{

       st[key(item)]= item;

}

Item Stearch(Key v)

{

       returnst[v];

}

void STdelete(Item item)

 

       st[key(item)]= NULLitem;

}

Item STselect(int k)

{

       inti;

       for(i=0;i<M;i++)

              if(s[i]!= NULLitem)

                     if(k--==0)return st[i];

}

 

void STsort(void (*visit)(Item))

{

       inti;

       for(i=0;i<M;i++)

              if(st[i]!=NULLitem)visit(st[i])

}

这段代码假设关键字的值是小于maxKey的正整数。限制它应用的主要因素是当maxKey较大时,对空间的需求,以及当N相对较小时,针对STinit的时间要求。

 

如果没有任何数据项我们可以使用位表。我们可以把第k位看做是表明k是否存在于表的标志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值