因為預先不知道出現的單詞列表,無法方便地排序並使用折半查詢;也不能分別對輸入中的每個單詞都執行一次線性查詢,開銷太大-->o(n^n)。
所以考慮使用二叉樹的資料結構(o(n*logn))來組織這些單詞,實現如下:
/*
* my practice of k&r 6.5
* */
#include #include #include #include #define maxword 100
/* a binary tree node */
typedef struct tnode_ tnode;
void print_tree(tnode *root);
tnode *add_tree(tnode *root, char *word);
void free_node(tnode *root);
char *copy_string(char *s)
return p;
}tnode *add_tree(tnode *p, char *word)
else
else if(result > 0)
else
} return p;
}void print_tree(tnode *p)
}void free_node(tnode *p)
}int getword(char *word, int n)
if(c != eof)
if(!isalpha(c))
while(n > 0)
else
n--;
} *w = '\0';
return w[0];
}int main()
} print_tree(root);
free_node(root);
return 0;
}
github:
參考:
二叉樹統計單詞個數(二叉搜尋樹實現及模板)
2018.1.20更新。二叉搜尋樹是一種,昂,很厲害的資料結構。下面是大一上學期學c語言的 來自應該燒香供著的聖經 c程式語言 裡面有加節點和列印樹的操作,freetree是我當時自己寫的。本來我現在更新應該加個deletetree來著,但是有點懶。姑且寫一下刪除的演算法,就不實現了。後面有c 模板...
單詞樹(最優二叉樹)
在進行文法分析的時候,通常需要檢測乙個單詞是否在我們的單詞列表裡。為了提高查詢和定位的速度,通常都畫出與單詞列表所對應的單詞查詢樹,其特點如下 1 根結點不包含字母,除根結點外每乙個結點都僅包含乙個大寫英文本母 2 從根結點到某一結點,路徑上經過的字母依次連起來所構成的字母序列,稱為該結點對應的單詞...
C C 語言實現二叉樹統計單詞
2020 4 5 c語言實現 手動輸入乙個個單詞 使用二叉樹統計單詞的個數 include include include 使用列舉定義bool型別 enum bool 此時c語言中enum bool為乙個型別 typedef enum bool bool 定義樹 typedef struct no...