C++版基本算法4-哈希查找

来源:互联网 发布:殷都区水冶镇豫广网络 编辑:程序博客网 时间:2024/05/18 03:06
//哈希查找算法
#include <iostream>
using namespace std;
typedef struct
{
int num;
char name[20];
}ElemType;//define  node
typedef struct
{
ElemType *elem;
int cout;
int sizeindex;
}HashTable;//define HashTable
int Hash(int num)
{
int p;
p=num%5;
return p;
}//define hash function


void InitHash(HashTable *H)//create HashTable
{
int i;
H->elem=(ElemType*)malloc(sizeof(ElemType));
H->cout=0;
H->sizeindex=24;
for(i=0;i<24;i++)
H->elem[i].num=0;//initialize 使searhash()函数能判断到底有没有元素在里面


}
int SearHash(HashTable H,int key,int *p)
{
int c=0;
*p=Hash(key);
while(H.elem[*p].num!=key&&H.elem[*p].num!=0)//通过二次探测再散列解决冲突
{
c=c+1;
if(c%2==1)
*p=*p+(c+1)*(c+1)/4;
else
*p=*p-(c*c)/4;
}
if(H.elem[*p].num==key)
return 1;
else
return 0;
}


void InsertHash(HashTable *H,ElemType e)
{
int p;
SearHash(*H,e.num,&p);
H->elem[p]=e;
++H->cout;
}
int main()
{
HashTable H;
int p,key,i;
ElemType e;
InitHash(&H);
for(i=0;i<3;i++)
{
     loop:cout<<"输入第"<<i+1<<"个学生的学号:"<<endl;
cin>>e.num;
if(!SearHash(H,e.num,&p))
{
cout<<"输入第"<<i+1<<"个学生的名字:"<<endl;
cin>>e.name;
InsertHash(&H,e);
}
else
{
cout<<"该学号已经存在!"<<endl;
goto loop;
}
}
cout<<"请输入你要查找的学号:"<<endl;
cin>>key;
if(SearHash(H,key,&p))
{
cout<<"查找成功!学生的姓名是:"<<H.elem[p].name<<endl;
cout<<"学生所在表中的位置是:"<<p<<endl;
}
else
cout<<"查找失败!你要查找的学生不存在!"<<endl;
return 0;
}
原创粉丝点击