Линейные поисковые массивы - PullRequest
0 голосов
/ 01 марта 2011

Как распечатать несколько запросов из линейного поиска в C.

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

Можно ли вернуть более одного значения, скажем, если в массиве есть несколько элементов, равных цели.

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

Вы могли бы столкнуться с проблемой выделения динамического массива внутри функции, но это, вероятно, что-то лучше оставить вызывающему.

Я бы изменил функцию примерно так:

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 голос
/ 01 марта 2011

Вместо того, чтобы возвращать совпадающие элементы, вы можете распечатать их индексные значения (что позволяет печатать несколько значений) или вставить их в массив, а затем вернуть это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...