LSEARCH(3C) DOMAIN/IX SYS5 LSEARCH(3C)
NAME
lsearch, lfind - linear search and update
USAGE
#include <stdio.h>
#include <search.h>
char *lsearch((char *)key, (char * )base, nelp, sizeof(*key), compar)
unsigned *nelp;
int (*compar)();
char *lfind ((char *)key, (char *)base, nelp, sizeof(*key), compar)
unsigned *nelp;
int (*compar)();
DESCRIPTION
Lsearch is a linear search routine that was generalized from
Knuth (6.1) Algorithm S. It returns a pointer into a table
indicating where a datum may be found. If the datum does
not exist, it is added to the end of the table. Key points
to the datum that the routine will search for in the table.
Base points to the first element in the table. Nelp points
to an integer that contains the number of elements in the
table. The integer is incremented if the datum is added to
the table. Compar is the name of the comparison function
which the user must supply (strcmp, for example). It is
called with two arguments that point to the elements being
compared. The function must return zero if the elements are
equal, and non-zero otherwise.
Lfind is the same as lsearch except that it does not add the
datum if it is not found in the table. Instead, it returns
a NULL pointer.
EXAMPLE
The fragment below will read in < TABSIZE strings of length
< ELSIZE and store them in a table, eliminating duplicates.
#include <stdio.h>
#include <search.h>
#define TABSIZE 50
#define ELSIZE 120
char line[ELSIZE], tab[TABSIZE][ELSIZE], *lsearch( );
unsigned nel = 0;
int strcmp( );
.
.
Printed 12/4/86 LSEARCH-1
LSEARCH(3C) DOMAIN/IX SYS5 LSEARCH(3C)
.
while (fgets(line, ELSIZE, stdin) != NULL &&
nel < TABSIZE)
(void) lsearch(line, (char *)tab, &nel,
ELSIZE, strcmp);
.
.
.
NOTES
Unexpected results will occur if the table is too full to
accept a new item.
The pointers to the key and to the element at the base of
the table should be of type pointer-to-element, and cast to
type pointer-to-character.
The comparison function need not compare every byte, so
arbitrary data can be contained in the elements, in addition
to the values being compared.
Although declared as type pointer-to-character, the value
returned should be cast into type pointer-to-element.
DIAGNOSTICS
If datum is found, both lsearch and lfind return a pointer
to it. Otherwise, lfind returns NULL and lsearch returns a
pointer to the newly added element.
RELATED INFORMATION
bsearch(3C), hsearch(3C), tsearch(3C).
LSEARCH-2 Printed 12/4/86