/*本程序(C实现)用于一个英文小说(单词数量大约100万)的词频统计。具体规则如下:
*按照单词出现频率由高到低排序,相同频率的单词,按照字典序排序,字典序小的在前
*输出排序的前100个单词及其频率,并将所有单词的频率输入到wordfreq.txt中,小说
*打开文件为article.txt.(程序采用字典树实现,加上快速排序算法,p:程序最后偷懒没有
*释放完全申请的内存空间)
**/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAX_WORD 100000/*估计单词种类最多数量*/
#define MAX_LEN 26/*限制单词最大长度*/
#define MAX_OUT_SCREEN 100/*屏幕输出单词数量最大值*/
#define ALPHA 26
typedef struct word
{
int count;
char *word;
int dictionary_code;/*字典树中字典序编号(最后遍历的时候输入)*/
}*WordNodeptr;
typedef struct branch_trie
{
char current_char;
int flag[ALPHA];/*对应该结点的26个链接点存在状态*/
int flag_word_exist;
struct branch_trie *links[ALPHA];
WordNodeptr current_words;
}*Branchptr;
Branchptr myTrie;
int dictionary_number_for_search = 1;
WordNodeptr word_list[MAX_WORD];
/*******/
int Add_Or_Insert(char *);
void Travel_Trie();
void DFS_Travel(Branchptr restrict);
void Quick_Sort(int, int);
int Partition(int, int);
void Outcome_Print();
/*******/
int main(void)
{
myTrie = (Branchptr)