return temp;
}
void BuildHash(HashTable &myTable,int &line)//创建哈希查找表
{ ifstream infile("name.txt",ios::in);//读方式打开文件
if(!infile)
{ cout<<"文件读取失败"<<endl;
abort(); //文件读取失败直接退出
}
char name[NAMELENGHT]="\0";
int j;
KeyType result=0;
cout<<"哈希表内容:"<<endl;
while(infile.getline (name,NAMELENGHT))//逐行读取文件
{ result=CharToNum(name);//获取名字转换后的数字(关键字)
myTable.Insert(result,line);//插入哈希表
line++;//统计文件行数
j=myTable.Find(result);//获取插入哈希表的位置
if(j>0)
{ DataType item=myTable.GetValue(j);
cout<<"j=";
cout<<setiosflags(ios::left)<<setw(7)<<j<<"ht[]="<<item.key<<endl;//设置对齐,不足补空格
}
}
cout<<"--------------------"<<endl<<endl;
infile.close();
}
四、实现的功能的描述
hash.cpp 包含以下操作:
int Check(char name[NAMELENGHT])//检查姓名输入的合法性,不合法返回 1,合法返回 0
int GetNameLen(char name[NAMELENGHT])//返回当个姓名的长度
KeyType CharToNum(char name[NAMELENGHT])//将姓名从汉语拼音转为整数,即求关键字
void BuildHash(HashTable &myTable,int &line)//创建哈希查找表
void PrintName(int line)//输出文件中的姓名,与要搜索的姓名进行匹配核对
void main()//主操作,主要包含创建哈希表,输入搜索的姓名与调用搜索函数功能
HashTable.h 包含以下操作:
int HashTable::Find(const DataType &x)const//哈希表的查找
int HashTable::Insert(const DataType &x,int pos)//哈希表的插入
int HashTable::Delete(const DataType &x)//哈希表的元素删除
DataType HashTable::GetValue(int i)const//取数据元素
int HashTable::IsIn(const DataType &x) //判断要搜索的元素是否已存在