mirror of
https://github.com/Kaehvaman/OAIP.git
synced 2025-01-19 00:59:12 +04:00
82 lines
1.7 KiB
C
82 lines
1.7 KiB
C
#define _CRT_SECURE_NO_WARNINGS
|
||
#include <string.h>
|
||
#include <stdlib.h>
|
||
#include "Dict.h"
|
||
|
||
#ifdef DICT_SORTED_ARRAY_C
|
||
|
||
#define MAX_WORDS 10000
|
||
|
||
// Слова
|
||
char words[MAX_WORDS][MAX_LEN_WORD];
|
||
// Количество слов в словаре
|
||
int numWords = 0;
|
||
|
||
/* CREATE - создает словарь.
|
||
Вызывается перед началом использования словаря. */
|
||
void Create() {
|
||
numWords = 0;
|
||
}
|
||
|
||
/* DESTROY - уничтожает словарь.
|
||
Вызывается после окончания использования словаря. */
|
||
void Destroy() {
|
||
numWords = 0;
|
||
}
|
||
|
||
/*
|
||
INSERT – добавляет элемент в множество.
|
||
Множество – содержит только уникальные элементы.
|
||
При повторном добавлении элемента в множество, множество не изменяется.
|
||
*/
|
||
void Insert(char* word) {
|
||
|
||
// Начиная с конца массива ищется место куда нужно вставить слово
|
||
// Вставка делается в отсортированный массив
|
||
// Вставка делается так, чтобы после вставки массив был отсортирован
|
||
int i = numWords;
|
||
while ((i > 0) && (strcmp(word, words[i - 1]) < 0)) {
|
||
strcpy(words[i], words[i - 1]);
|
||
i--;
|
||
}
|
||
strcpy(words[i], word);
|
||
++numWords;
|
||
}
|
||
|
||
/*
|
||
MEMBER – сообщает, является ли указанный элемент членом данного множества или нет.
|
||
Если является - возвращает 1, иначе - возвращает 0
|
||
*/
|
||
int Member(char* word) {
|
||
// Используется алгоритм бинарного поиска слова в отсортированном массиве
|
||
|
||
if (bsearch(word, words, numWords, sizeof(char), strcmp)) {
|
||
return 1;
|
||
}
|
||
else {
|
||
return 0;
|
||
}
|
||
|
||
/*
|
||
int left = 0;
|
||
int right = numWords - 1;
|
||
|
||
while (left <= right) {
|
||
int middle = (left + right) / 2;
|
||
|
||
int dif = strcmp(words[middle], word);
|
||
if (dif == 0) {
|
||
return 1;
|
||
}
|
||
else if (dif < 0) {
|
||
left = middle + 1;
|
||
}
|
||
else if (dif > 0) {
|
||
right = middle - 1;
|
||
}
|
||
}
|
||
return 0;*/
|
||
}
|
||
|
||
#endif
|