12 楼真牛B, 我只是说说而已...
1、所有的汇编指令如附件所示,有什么方法能快速的根据这个指令列表创建创建hash树
// 百度找一个字符串的哈希函数,得到每个字符串的哈希值,也就是链表数组的索引
// 采用链地址法,把字符串插入到数组链表中, 相当于插入到多个单链表中...
// 哈希很简单的,就是比单链表多个 哈希函数来算出链表数组索引
void hashtableInsert(Hashtable hashtable, HASHTABLEkey key, HASHTABLEitem item)
{
int i = hash(key);
HashtableNode x = hashtable->heads[i];
x->next = newHashtableNode(key, item, x->next);
}
2、如何方便获取汇编源码中的指令
// hash是一个一一映射关系,
// key 是字符串, value是字符串的频度
// 所以只能通过字符串找 字符串的频度
HASHTABLEitem hashtableSearch(Hashtable hashtable, HASHTABLEkey key);
3、对于指定的汇编指令应该创建一个怎样的结构体来记录频度信息
typedef struct xHashtableNode
{
HASHTABLEkey key;
HASHTABLEitem item;
struct xHashtableNode* next;
} HASHTABLEnode, *HashtableNode;
这样的结构就行了...
你的文件是不是还需要解析的呀的?? 没有发现有重复的指令
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Hash.h"
Hashtable hashtable;
int main(void)
{
FILE* file;
char s[100] = {0};
char* t;
file = fopen("hash.txt", "r");
freopen("result.txt", "w", stdout);
hashtable = newHashtable(100);
while (fscanf(file, "%s", s) != EOF)
{
t = malloc(100);
strcpy(t, s);
hashtableInsert(hashtable, t, 0);
}
hashtableForeach(hashtable);
return 0;
}
[
本帖最后由 BlueGuy 于 2011-10-16 15:39 编辑 ]