监视哨可以防止越界,可以不必每次查找时都检查是否到末尾了.
前提条件: 0号元素不存内容,留出来存监视哨
/* 没有采用监视哨的算法 */
int SeqSearch(RecordList l, KeyType k)
{
l.r[0].key = k;
i = l.length;
while (i>=1
&& l.r[i].key != k) // 每次需要循环判断i是否越界
i--;
if (i>=1)
return i;
else
return 0; // 返回0表示没找到
}
/* 采用了监视哨的算法 */
intSeqSearch(RecordList l, KeyType k)
{
l.r[0].key = k;
i = l.length;
while (l.r[i].key != k) // 不仅省去了每次的判断,且找不到的话,也是可以返回0
i--;
return i;
}