そこで、単語を辞書ファイルに保存する試みを実装しています。挿入操作を実装しました。今、私は辞書的に印刷しようとしています。私はそれを手に入れようとしていますが、修正方法がわからないという小さな問題があります。また、プログラムの速度にも注意を払っています。そのため、配列または連結リストよりもトライを選択しました。単一のノードは次のようになります。
struct node {
int end;
int occurrences;
int superwords;
struct node* child[26];
};
"end" は、単語の完成を示します (たとえば、単語帳の文字 'k' の end == 1。これにより、単語が実際にツリーに挿入されたかどうかを確認する際の混乱を防ぐことができます)。
メソッドは次のとおりです。
void preorder(struct node *follow, char hold[200], int s){
int i = 0;
if(follow == NULL){
return;
}
for(i = 0; i < 26; i++){
if(follow->child[i] == NULL){
continue;
}
else{
printf("%c",'a'+i);
hold[s] = 'a'+i;
s++;
if(follow->child[i]->end == 1){
printf("\n");
hold[s] = '\0';
printf("%s", hold);
}
preorder(follow->child[i], hold, s);
}
}
return;
}
挿入した単語は、boo、book、booking、john、tex、text です。それらはその順序で印刷され、行が区切られている必要があります。私の出力は次のようになります。
boo
book
booking
bookingjohn
bjohntex
bjtext
bjtext
これはおそらく、単語の接頭辞が失われないように格納する「ホールド」配列と関係があることを知っています。接頭辞とそれに関連するすべての単語 (boo、book、booking が良い例) の完了を示すために、どこかでインデックスをゼロに戻す必要がありますが、成功していません。どんな助けでも大歓迎です。私の思考プロセスをさらに明確にすることができれば幸いです.