你翻译的第一段漏了说明,其实那个data.txt文件就是425行的文件,结束在第一行
"----------"这里,然后这下面的几行是用来搜索的,从你建立的哈希表中搜索出关键字。
#include<iostream> #include<string> #include<fstream> using namespace std;
const int HashMaxSize = 350; //hash表大小 const int ItemsAmount = 425; //数据数量
void Input(string data[]) { ifstream hashdata("E:\\data.txt"); //打开data.txt for(int i=0; i<ItemsAmount; i++) { hashdata>>data[i]; } }
int Hash(string data,int m) //字符转换成int后取模 { unsigned int h=0; for(int i=0; i<data.length(); i++) { h<<=3; h+=data[i]; } return h%m; }
struct LNode{ //单接点结构 string data; LNode* next; };
class HashList { private: LNode* HT[HashMaxSize]; //指针数组
public: void InitHashList(); //初始化hash表 void ClearHashList(HashList*& hl); //清空hash表 void Insert(HashList &hl,string data[]); //插入数据 };
void HashList::InitHashList() { for(int i=0; i<HashMaxSize; i++) HT[i]=NULL; }
void HashList::ClearHashList(HashList*& hl) { LNode* p; for(int i=0; i<HashMaxSize; i++) { p=HT[i]; while(p!=NULL) { HT[i]=p->next; delete p; p=HT[i]; } } }
void HashList::Insert(HashList &hl,string data[]) { int key[ItemsAmount]; for(int i=0; i<ItemsAmount; i++) { key[i] = Hash(data[i],HashMaxSize); LNode* p=new LNode; if(p==NULL) system("exit"); p->data=data[i]; p->next=HT[key[i]]; HT[key[i]]=p; } }
void main() { HashList hl; hl.InitHashList();
string data[ItemsAmount]; Input(data); hl.Insert(hl,data); }
[此贴子已经被作者于2004-11-02 17:15:57编辑过]