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;
}
#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;
}
- C++版基本算法4-哈希查找
- c/c++常用算法(13) -- 基本查找算法
- 十.用C语言实现查找算法 (1)顺序查找;(2)二分查找(折半查找);(3)二叉排序树;(4)哈希查找
- C++版基本算法1--顺序查找
- C++版基本算法2--折半查找
- C++版基本算法3--分块查找
- 基本查找算法
- 数据结构:基本查找算法
- 基本查找算法
- 数据结构基本查找算法
- 基本查找算法
- 基本算法-二分查找
- C/C++:各种基本算法实现小结(六)—— 查找算法
- 哈希查找算法
- 哈希查找算法
- 算法:哈希查找
- C 二分查找算法
- c 二分查找算法
- atoi,itoa,sprintf等函数的实现
- ubuntu 卸载 Cario-Dock
- codeforces 258-E. Little Elephant and Tree 线段树,离线
- 算法导论 - QuickSort 快速排序 C++实现
- 自定义通用型空间配置器
- C++版基本算法4-哈希查找
- QR code资料
- 今天来签到
- 学习计算机知识
- android DOM 解析 网络上xml文档
- 10299 Problem A: Modular Fibonacci(斐波那契的矩阵快速幂)
- 集成ffmpeg/x264:ERROR: libx264 not found的问题
- VC++获取U盘盘符(各种类型的驱动器都可以)
- 为CListBox加上智能水平滚动条