Good Question. look at your comparision function
/* ensure the result is either 1, 0 or -1 */
if((*Word1)->Word < (*Word2)->Word) {
Result = -1;
}
else if((*Word1)->Word > (*Word2)->Word) {
Result = 1;
}
and
typedef struct WORD {
char *Word;
(*Wordx)->Word type is char*.
Do you know how pointer values be saved at memory? they are 8byte integer form; The address of memory.
Let you comparing like this : (*W)->Word > (*W)->Word
This mean "Compare the address of memory", not "Compare the string".
If you want to compare the string, use strcmp((*W)->Word, (*W)->Word); or...just make strcmp.
And...I don't like copy sourcecode. I just want to say this for you.....
https://github.com/HenryNi/mycode/blob/master/C/c_lang_book/krx60410.c