假定关键字的值是不同的小整数。在这种情况下,最简单的搜索算法是对存储在数组中的数据项进行排序,并按关键字进行索引。下面给出这种思想的伪代码:
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是否存在于表的标志。