线性搜索数组

时间:2011-03-01 03:44:33

标签: c linear

如何从C中的线性搜索打印多个搜索。

for (i=0; i < index; i++)
   if (array[i] == target)
          return i;

如果数组有多个等于目标的元素,是否可以返回多个值。

2 个答案:

答案 0 :(得分:2)

你可能会遇到在函数中分配动态数组的麻烦,但这可能是调用者需要管理的更好的东西。

我会改变函数,例如:

int findVal (int *array, int size, int val) {
    for (int i = 0; i < size; i++)
        if (array[i] == val)
            return i;
    return -1;
}

允许你指定一个起点(或者更确切地说,一个小于起点):

int findVal (int *array, int size, int last, int val) {
    for (int i = last + 1; i < size; i++)
        if (array[i] == val)
            return i;
    return -1;
}

然后让您的客户通过以下方式调用它:

int index = findVal (myarray, sizeof(myarray)/sizeof(*myarray), -1, myval);
while (index != -1) {
    // Do something with index.
    index = findVal (myarray, sizeof(myarray)/sizeof(*myarray), index, myval);
}

如果您的客户想要它在数组中,他们可以将它放在一个数组中。但是,如果他们只是想做一些短暂的事情(比如只打印索引然后忘掉它),那么浪费一个数组是没有意义的。

答案 1 :(得分:1)

您可以打印出索引值(允许打印多个值),或者将它们插入数组中,然后返回它,而不是返回匹配元素。