我创建了一个程序,用于从文本文件中收集单词及其频率。目前我已经设法将这些单词及其频率保存在二叉搜索树中。问题是程序以字母(键)顺序打印出单词及其频率。我需要根据频率打印前100个单词。我想使用二叉搜索树,即使它不是执行此任务的最有效方式。
如果我理解正确,可以在这里使用最大堆结构,但我需要更多具体步骤继续。我对数据结构很陌生。
我的结构如下:
typedef char data_type[MAXLEN];
typedef struct bstnd {
data_type data;
int freq;
struct bstnd* parent;
struct bstnd* left;
struct bstnd* right;
} bstnode, *pbstnode;
typedef struct bt {
pbstnode root;
} bst;
我的主要功能如下:
int main( int argc, char* argv[] ){
bst tree;
tree.root=0;
FILE * fp;
int i=0, c=0;
char buffer[MAXLEN];
fp = fopen(argv[1], "r");
if (fp==0) {
printf("Usage: %s [file]\n", argv[0]);
return 0;
}
while (!feof(fp)) {
c = fgetc(fp);
if (isalpha(c) || c == '\'' || c == '’' || c == '‘') {
buffer[i]=tolower(c);
i++;
}
else {
buffer[i]='\0';
if (isalpha(buffer[0])) {
bst_insert( &tree, buffer );
}
buffer[0]='\0';
i=0;
}
}
print_tree_inorder(tree);
return 0;
}