mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

LSEARCH(3C)                                         LSEARCH(3C)

НАЗВАНИЕ 
        lsearch, lfind - последовательный поиск и обновление

СИНТАКСИС 
        #include 
        #include 
        
	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) ( );

ОПИСАНИЕ 
        Функция lsearch предназначена для выполнения последова-
        тельного поиска в соответствии с алгоритмом,  описанным
        в книге Д. Кнута: Искусство программирования  для  ЭВМ.
        Т. 3. Сортировка, поиск. - М.: Мир, 1978.  Раздел  6.1,
        алгоритм S.

        Функция lsearch возвращает указатель внутрь таблицы  на
        искомые данные. Если данные не найдены, они добавляются
        в конец таблицы. Аргумент key указывает на объект  дан-
        ных, разыскиваемый в таблице (ключ поиска). Base указы-
        вает на первый элемент таблицы. Nelp - указатель на це-
        лое, содержащее текущее количество элементов в таблице.
        Это целое значение увеличивается  на  единицу,  если  в
        таблицу добавляются данные. Compar - функция сравнения,
        предоставляемая   пользователем   (например,    функция
        strcmp). Функция сравнения вызывается с двумя  аргумен-
        тами - указателями на сравниваемые элементы. Она должна
        возвращать нулевое значение,  если  элементы  равны,  и
        значение, не равное нулю, в противном случае.

        Функция lfind выполняет то  же  самое,  что  и  функция
        lsearch, но не добавляет данные в таблицу при неудачном
        поиске, возвращая в этом случае пустой указатель NULL.

ПРИМЕЧАНИЯ 
        Указатели на ключ (key) и  на  первый  элемент  таблицы
        (base) должны иметь тип "указатель на элемент" и преоб-
        разовываться к типу "указатель на символ".

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

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

ПРИМЕР 
        Приведем фрагмент программы, который считывает  цепочки
        символов в количестве, меньшем TABSIZE, и длиной, мень-
        шей ELSIZE, и помещает прочитанные цепочки  в  таблицу,
        исключая дубликаты.

        #include 
        #include 
        
        #define TABSIZE 50
        #define ELSIZE 120
        
          char line [ELSIZE], tab [TABSIZE] [ELSIZE],
               *lsearch ();
          unsigned nel = 0;
          int strcmp ();
             ...
          while (fdets (line, ELSIZE, stdin) != NULL &&
                 nel < TABSIZE)
            (void) lsearch (line, (char*) tab, &nel,
                               ELSIZE,strcmp);
             ...

СМ. ТАКЖЕ 
        bsearch(3C), hsearch(3C), string(3C), tsearch(3C).

ДИАГНОСТИКА 
        Если искомый объект  данных  найден,  то  обе  функции,
        lsearch и lfind, возвращают указатель на него.  В  про-
        тивном случае функция lfind возвращает пустой указатель
        NULL, а функция lsearch возвращает указатель на  новый,
        добавленный объект.

СЮРПРИЗЫ 
        Недостаток свободного пространства в таблице для добав-
        ления нового объекта данных может привести к непредска-
        зуемым последствиям.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк