为了应付面试,最近一直在学习数据结构和算法。本文将通过统计文件中单词的频率,并按频率出现顺序和按字母顺序输出文件中的单词及出现次数。
比如“abc aa hello welcome hello aa abc hello”, 按频率次数的输出为:
hello 3
aa 2
abc 2
welcome 1
按字符顺序输出为:
aa 2
abc 2
hello 3
welcome 1
本文将尝试采用以下几种算法分别来实现
1.数组+冒泡排序
2.链表+哈希
3.二叉树
方案一:
首先构件如下结构体:
Typedef struct node *nodeptr
Typedef struct node
{
Char*word;//用来存放单词
Int count;//用来存放单词出现的个数
}node
数组的劣势在于需要事先知道文本文件中字符串的多少,如果太大会造成浪费太小又会造成数组溢出。
只能先定义一个足够大的数组
#define MAX_WORD_NUM 1024*1024
通过一个个读取文件中的字符串,将其按顺序存放在数组中,每次存放之前要比较当前字符串是否在数组中已经存在,
当存在时count++,不存在即存放在最后一个未被暂用的数组空间中。比较的时间复杂度为O(n)
由于数组的插入与删除操作是不方便的,所以排序是放在