另外,为什么这会给我一个错误,因为我使用bool?
我需要使用这种顺序搜索算法,但我不确定如何。我需要将它与数组一起使用。有人可以指出我正确的方向或如何使用它。
bool seqSearch (int list[], int last, int target, int* locn){
int looker;
looker = 0;
while(looker < last && target != list[looker]){
looker++;
}
*locn = looker;
return(target == list[looker]);
}
答案 0 :(得分:1)
有一些问题。
编辑:我猜最后是length - 1
。这是一个不寻常的签名。所以这个电话是这样的:
int list[CONSTANT];
...
int foundIndex;
bool found = seqSearch(list, sizeof(list)/sizeof(int), target, &foundIndex);
有许多方法可以启用bool。一种是使用stdbool.h
和C99。
答案 1 :(得分:1)
很明显
list[]
是您要搜索的列表
last
是list
中的最后一个索引
target
是您在list
搜索的内容
locn
将包含找到target
的索引
返回值是一个布尔值,表示是否找到了target
关于如何传递locn的问题,请执行类似
的操作int locn; /* the locn where the index of target will be stored if found */
bool target_found = seqSearch(blah blah blah, &locn);
答案 2 :(得分:1)
您的代码存在的问题是,如果您搜索数组中不存在的元素,looker
将等于last
并且您尝试访问位置last
处的数组元素这是无效的。
相反,你可以这样做:
bool seqSearch (int list[], int last, int target, int* locn) {
int looker;
for(looker=0;looker<last;looker++) {
// target found.
if(list[looker] == target) {
*locn = looker; // copy location.
return true; // return true.
}
}
// target not found.
*locn = -1; // copy an invalid location.
return false; // return false.
}
您可以按如下方式调用该函数:
int list[] = {5,4,3,2,1}; // the array to search in.
int size = sizeof(list)/sizeof(list[0]); // number of elements in the array.
int target = 3; // the key to search for.
int locn; // to hold the location of the key found..and -1 if not found.
if( seqSearch(list,size,target,&locn) ) {
// target found in list at location locn.
} else {
// target not found in list.
}
答案 3 :(得分:1)
看起来你就像这样使用它......
// I assume you've set an int list[], an int listlen and an int intToFind
int where;
bool found = seqSearch(list, listlen - 1, intToFind, &where);
if (found)
{
// list[where] is the entry that was found; do something with it
}