Frage

Auch warum dies gibt mir einen Fehler, da ich Bool verwendet?

Ich brauche diesen sequentiellen Suchalgorithmus zu verwenden, aber ich bin nicht wirklich sicher, wie. Ich brauche es mit einem Array zu verwenden. Kann jemand Punkt mich in der richtigen Richtung oder etwas darüber, wie diese verwenden.

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]);
}
War es hilfreich?

Lösung

Sieht aus wie würden Sie es verwenden, wie diese ...

// 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
}

Andere Tipps

Es ist ziemlich klar

list[] ist die Liste, die Sie suchen werden last ist der letzte Index in der list target ist, was Sie in list suchen locn enthält den Index, bei dem target gefunden wurde Der Rückgabewert ist eine Bedingung, die anzeigt, wenn der target gefunden wurde

für Ihre Frage, wie LOCN passieren, so etwas wie

int locn; /* the locn where the index of target will be stored if found */

bool target_found = seqSearch(blah blah blah, &locn);

Das Problem mit Ihrem Code, wenn Sie für ein Element nicht in dem Array suchen, wird looker zu last gleich sein, und Sie versuchen, ein Array-Element an der Stelle last zuzugreifen, die ungültig ist.

Stattdessen können Sie tun:

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.
}

Sie die Funktion aufrufen wie folgt:

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.
}

Es gibt ein paar Probleme.

  1. Ich würde den Namen des zuletzt von der Größe ändern.
  2. Wenn Sie den Wert nicht finden, werden Sie einen ungültigen Speicherplatz dereferenzieren.

EDIT: Ich denke, zuletzt ist die length - 1. Das ist eine ungewöhnliche Signatur. Also der Ruf ist so etwas wie:

int list[CONSTANT];
...
int foundIndex;
bool found = seqSearch(list, sizeof(list)/sizeof(int), target, &foundIndex);

Es gibt viele Möglichkeiten Bool zu ermöglichen. Eine davon ist die Verwendung stdbool.h mit C99.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top