Я пытаюсь создать небольшую программу, которая читает слова из текстового файла неизвестного размера и сохраняет эти слова в массив деревьев двоичного поиска (BST).Каждый индекс в массиве представляет длину слов в этом дереве BST.
Например, индекс 0 не содержит слов, но индекс 1 содержит дерево BST со словами длиной в одну букву, а индекс 5 содержит дерево BST со словами длиной 5 букв и т. Д. Все деревья BST сбалансированы с помощьюсравнивая две строки, чтобы определить, больше или меньше новая строка, чем корневая строка, и затем назначить ее соответствующим образом.
Мой исходный код содержит непрозрачные объекты (указатели void).Но я включил уменьшенную версию программы, которую я пытаюсь понять.Я включил printf
операторов, чтобы показать мой подход к отладке, потому что программа продолжает падать.Я работаю над этим каждый день часами и не могу заставить его работать на всю жизнь.По какой-то причине я не мог определить, правильно ли я использовал указатели, поэтому после примерно 5 различных переписываний этого кода я решил использовать только основы, но, похоже, я тоже не могу заставить это работать.
Пожалуйста, помогите, это истощает меня.Спасибо за вашу щедрость и внимание к оказанию мне помощи в этом заранее.
Мой вывод выглядит следующим образом:
A CHECKPOINT
B CHECKPOINT
C CHECKPOINT
1 CHECKPOINT
2 CHECKPOINT
Код выглядит следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct my_string{
char* data;
struct my_string *left, *right;
} My_string;
void init( My_string* Root, char* data );
int main(int argc, char* argv[]){
My_string* myStringArray[ 30 ] = {NULL};
/*My_string* Root = NULL;*/
FILE *fp = NULL;
char new_string[ 30 ];
fp = fopen( "dictionary.txt", "r");
int string_length = 0;
printf( "A CHECKPOINT\n");
while( fscanf( fp, "%1024s" , new_string ) == 1 ){
printf( "B CHECKPOINT\n");
string_length = strlen( new_string );
printf( "C CHECKPOINT\n");
init( myStringArray[ string_length ], new_string );
printf( "D CHECKPOINT\n");
}
printf( "" );
fclose(fp);
return 0;
}
void init( My_string* Root, char* data ){
printf( "1 CHECKPOINT\n");
int compare = 0;
if( Root == NULL ){
printf( "2 CHECKPOINT\n");
(*Root).data = ( My_string* )malloc( sizeof( My_string ));
printf( "3 CHECKPOINT\n");
if( !Root ) exit(1);
Root->data = data;
Root->left = Root->right = NULL;
}
else{
if( compare = strncmp( data, Root->data, 36 ) == 0 )return;
else if( compare == -1 ) init( Root->left, data );
else init( Root->right, data );
}
}
Еще раз спасибо!