题目描述 编写一个程序,根据单词的出现频率降序打印出所输入的的各个单词。每个单词前标有它的计数值。 输入 各个单词,输入0则表示单词结束 输出 降序打印单词出现的频率和单词。
时间: 2024-06-13 18:08:17 浏览: 15
这道题目需要使用哈希表来统计每个单词出现的次数,然后再按照出现次数进行排序输出。以下是代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORD_LEN 100 // 单词最大长度
#define HASH_SIZE 10007 // 哈希表大小
typedef struct WordNode {
char word[MAX_WORD_LEN];
int count;
struct WordNode *next;
}Node;
WordNode *hashTable[_SIZE];
// 哈希函数
unsigned int hash(char *str) {
unsigned int hash = 0;
while (*str) {
hash = hash * 131 + *str++;
}
return hash % HASH_SIZE;
}
// 插入单词
void insert(char *word) {
unsigned int h = hash(word);
WordNode *p = hashTable[h];
while (p != NULL) {
if (strcmp(p->word, word) == 0) {
p->count++;
return;
}
p = p->next;
}
p = (WordNode *)malloc(sizeof(WordNode));
strcpy(p->word, word);
p->count = 1;
p->next = hashTable[h];
hashTable[h] = p;
}
// 比较函数
int cmp(const void *a, const void *b) {
WordNode **pa = (WordNode **)a;
WordNode **pb = (WordNode **)b;
return (*pb)->count - (*pa)->count;
}
int main() {
char word[MAX_WORD_LEN];
while (scanf("%s", word) != EOF && strcmp(word, "0") != 0) {
insert(word);
}
int n = 0;
WordNode *nodes[HASH_SIZE];
for (int i = 0; i < HASH_SIZE; i++) {
WordNode *p = hashTable[i];
while (p != NULL) {
nodes[n++] = p;
p = p->next;
}
}
qsort(nodes, n, sizeof(WordNode *), cmp);
for (int i = 0; i < n; i++) {
printf("%d %s\n", nodes[i]->count, nodes[i]->word);
}
return 0;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)