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);
      }

Seealso:



This page last updated on Fri Nov 30 10:48:32 MSK 2001
Copyright © 1992-2001, Vitaly Filatov, Moscow, Russia
Webmaster