Я думал, что когда мы объявляем массив указателей, то он заполнится мусорными значениями, и в таком случае мой список не будет иметь конца.
Получается, что если мы объявляем массив как глобальную переменную - то он всегда автоматически инициализируется нулями?
Кстати при таком варианте, компилятор выдает следующую ошибку:
typedef struct node
{
char word1[SIZE];
struct node *next;
} node;
node * new = malloc (sizeof (node));
//новый элемент структуры в поле next получает адрес текущей головы списка
new->next=hashtable[k];
//копируем в информационное поле нашей структуры считанное слово
new->word1 = strdup(word);
//делаем головой списка наш новый элемент
hashtable[k] = new;
правильно я всё понял?
Если я все правильно понял, то в данном варианте, все таки стоит инициализировать массив указателей как NULL...
...и делать проверку вставлялся ли ранее элемент в список или нет?
node *hashtable[26];
, тогда всё могло бы быть примерно так://максимальная длина слова в словаре
#define SIZE 45
int hash_function (char* key);
//определяем структуру
typedef struct node
{
char *word1;
struct node *next;
} node;
//создаем хэш-таблицу, в которой будут хранится списки
node *hashtable[26];
int main()
{
char *text = "small";
FILE *fp = fopen(text, "r");
if (fp == NULL)
{
printf("Could not open %s.\n", text);
return 1;
}
char word[SIZE];
while(!feof(fp))
{
//считываем слово из словаря
fscanf(fp,"%s",word);
//определяем его место в массиве
int k=hash_function(word);
//добавляем слово
node * new = malloc (sizeof (node));
new->next=hashtable[k];
strcpy(new->word1, word);
hashtable[k] = new;
}
fclose(fp);
return 0;
}
int hash_function (char* key)
{
int hash = tolower (key [0]) - 'a';
return hash;
}
#if (n < 3)
n не является определённым символом препроцессора, поэтому препроцессор заменяет его на 0. 0 < 3 -- истина, блок кода компилируется.если я пребразую y в double числа будут нормальные, а не такие, как сейчас
x как float (%f), а он у вас double, double это %lf.
free, здесь без вариантов. И если в node указатель, а не массив, то его тоже free.