这是一道笔试题来的,主要是用字典树来解决:
/******************************************
*
* 描述:这是一道笔试题,要求按单词出现的次序打印出单词及其出现的次数;
*
* 思路:既然是笔试题,肯定要考虑时间复杂度,字典树要比哈斯的要好,
* 因此我用了字典树.
*
* author: huangkq1989@scut2008
* blog:http://blog.csdn.net/kangquan2008
*
* ****************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 26 // 字符的种类数
#define DIFFERENCE_WORD_SIZE 10000 //不同的单词的个数
#define WORD_MAX_LENGTH 10 // 单词的最大长度
#define CHECK_RET(ret,info) \
if((ret) < 0) printf("error:%s\n",(info)),exit(EXIT_FAILURE)
typedef struct Trie{
int cnt;// 该字符在该位置出现的次数
int times;// 标识为词尾
int sequence;// 出现的次序,0为初始值,从1开始
struct Trie * next[SIZE];
}*Trie, Node;
typedef struct Result{
char data[WORD_MAX_LENGTH];
int times;
}Result;
int seq = 0; // 记录出现的次序
Result result[DIFFERENCE_WORD_SIZE];
int initial(Node ** nod