Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- Turbo C - <b>lsearch() linear search for key; add key if not found</b> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
lsearch()                Linear Search for Key; Add Key If Not Found

 #include   <search.h>

 char       *lsearch(key,base,num,width,compare);
 char       *key;                        Search key
 char       *base;                       Pointer to base of search data
 unsigned   *num, width;                 Number and width of elements
 int        (*compare)();                Pointer to compare function

    lsearch() performs a linear search of a table of information.
    (Compare this to bsearch(), which performs a binary search.)  The
    table is an array of '*num' elements, each element being 'width' in
    size.  'base' is a pointer to the base of the array to be searched,
    and 'key' is the item being sought.  'compare' points to a
    user-supplied routine that compares two elements and returns a value
    based on the comparison. 'compare' returns one of the following
    values:

                  0           'element1' is identical to 'element2'

              not 0           'element1' and 'element2' are different

    Returns:    A pointer to the first occurrence of 'key' in the array
                pointed to by 'base'.  NULL is returned if 'key' is not
                found, and lsearch() adds key to the end of the list.
                (Compare to lfind(), which operates similarly to
                lsearch() but does not add key to the end of the list.)
                If 'key' is not found, lsearch() adds it to the end of
                the array.

      Notes:    lsearch() will make repeated calls to the 'compare'
                routine during the search.  On each call to 'compare',
                'key' will be compared with one of the elements of
                'base'.

                lsearch() does not require the array to be sorted (as
                bsearch() does).

  -------------------------------- Example ---------------------------------

    The following statements search an array for a value.  If the value
    is not found, it is added to the end of the array.

        #include <search.h>
        #include <stdio.h>
        #include <string.h>

        int vals[] = {10,95,30,75,54,15,28,88,100};
        int num = 10;
        int key = 62;
        int *found;
        int cmp();

        main()
        {
            found = (int *)lsearch(&key,vals,&num,sizeof(int),cmp);
            if (found == 0)
               printf("%d already in table\n",key);
            else
                printf("%d added to table",key);
        }

      int cmp(n1,n2)
      int *n1;
      int *n2;
      {
          return(*n1 - *n2);
      }

See Also: bsearch() lfind() qsort()

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson