哈希表课程设计
㈠ 哈希表设计
太复抄杂太深奥 了 不知道这个对你有没有帮助~~
http://www.kaogo.com/learning/html/2007-6/20076191512042556282-2.html
㈡ 课程设计:哈希表操作
PASCAL语言 不知您能否看懂
function bkd(ss:string):longint;//哈希函数
var i:longint;
begin
bkd:=0;
for i:=1 to length(ss) do
bkd:=((bkd*131+ord(ss[i])) and $FFFFFFF) mod 999997;
end;
function find(ss:string):longint;//查找操作
var j:longint;
begin
j:=hash[num];//哈希表的头指针
while (j>0) and (list[j]<>ss) do j:=next[j];//拉链探测,相当于一专个桶来处理冲突
exit(j);//返回属在线性表中的位置
end;
procere insert(ss:string);//插入操作,SS为插入元素,以字符串的形式存储
var j:longint;
begin
inc(loc);
list[loc]:=ss;//线性表
next[loc]:=hash[num];//链到对应哈希值的桶上
hash[num]:=loc;
end;
哈希值计算:NUM:=BKD(SS) MOD OO;oo就是你要除余得数
㈢ 数据结构课程设计《哈希表查找》,求大神给代码啊
肯定不是A,因为模为23的余数为0~22,不会是3位数2789465^2=7781114986225,正好是答案B
㈣ 正在做数据结构的课程设计,有关通讯录的系统设计,要用C,要用哈希表,求高手!!!!!!!!!!!!
#include<stdio.h>
#include<iostream>
#include<conio.h>
using namespace std;
#define HASH_LEN 50
#define M 47
int NAME_NO=30;
typedef struct
{
char *py;
int k;
}NAME;
NAME NameList[HASH_LEN];
typedef struct
{
char *py;
int k;
int si;
}HASH;
HASH HashList[HASH_LEN];
void InitNameList()
{
char *f;
int r,s0,i;
NameList[0].py="jiangyi";
NameList[1].py="zhouling";
NameList[2].py="yiqiang";
NameList[3].py="xielu";
NameList[4].py="lichi";
NameList[5].py="yixiaoxia";
NameList[6].py="tanxi";
NameList[7].py="zhangxiaowen";
NameList[8].py="lilin";
NameList[9].py="ouyangyong";
NameList[10].py="chenkaihan";
NameList[11].py="maqingyu";
NameList[12].py="hefei";
NameList[13].py="luowen";
NameList[14].py="yangwencheng";
NameList[15].py="wangzhen";
NameList[16].py="xiaguo";
NameList[17].py="caifuxian";
NameList[18].py="shenwenbo";
NameList[19].py="gaoyuehua";
NameList[20].py="xiaoyubin";
NameList[21].py="wangwei";
NameList[22].py="huangyingbo";
NameList[23].py="gongchong";
NameList[24].py="wuhang";
NameList[25].py="zhouweicheng";
NameList[26].py="yubo";
NameList[27].py="dengliquan";
NameList[28].py="liuyuan";
NameList[29].py="luokaibo";
for (i=0;i<NAME_NO;i++)
{
s0=0;
f=NameList[i].py;
for (r=0;*(f+r)!='\0';r++)
s0=*(f+r)+s0;
NameList[i].k=s0;
}
}
void CreateHashList()
{
int i;
for (i=0; i<NAME_NO;i++)
{
HashList[i].py="";
HashList[i].k=0;
HashList[i].si=0;
}
for (i=0;i<HASH_LEN;i++)
{
int sum=0;
int adr=(NameList[i].k)%M;
int d=adr;
if(HashList[adr].si==0)
{
HashList[adr].k=NameList[i].k;
HashList[adr].py=NameList[i].py;
HashList[adr].si=1;
}
else
{
do
{
d=(d+NameList[i].k%10+1)%M;
sum=sum+1;
}while (HashList[d].k!=0);
HashList[d].k=NameList[i].k;
HashList[d].py=NameList[i].py;
HashList[d].si=sum+1;
}
}
}
int FindList()
{
char name[20]=;
int s0=0,r,sum=1,adr,d;
printf("\n请输入人物名称:");
scanf("%s",name);
for (r=0;r<20;r++)
s0+=name[r];
adr=s0%M;
d=adr;
if(HashList[adr].k==s0)
{
printf("\n名称:%s 关键字:%d 查找长度为: 1",HashList[d].py,s0);
cout<<endl;
return 0;
}
else if (HashList[adr].k==0)
{
printf("无此记录!");
cout<<endl;
return 1;
}
else
{
int g=0;
do
{
d=(d+s0%10+1)%M;
sum=sum+1;
if (HashList[d].k==0)
{
printf("无此记录! ");
cout<<endl;
g=1;
return 1;
}
if (HashList[d].k==s0)
{
printf("\n名称:%s 关键字:%d 查找长度为:%d",HashList[d].py,s0,sum);
cout<<endl;
g=1;
return 0;
}
}while(g==0);
}
}
void Display()
{
int i;
float average=0;
for(i=0; i<NAME_NO; i++)
{
if(HashList[i].k%M==0)
HashList[i].py="";
}
printf("\n\n地址\t关键字\t\t搜索长度\tH(key)\t 名称\n");
for(i=0; i<NAME_NO; i++)
{
printf("%d ",i);
printf("\t%d ",HashList[i].k);
printf("\t\t%d ",HashList[i].si);
printf("\t\t%d ",HashList[i].k%M);
printf("\t %s ",HashList[i].py);
printf("\n");
}
for (i=0;i<HASH_LEN;i++)
average+=HashList[i].si;
average/=NAME_NO;
printf("\n\n平均查找长度:ASL(%d)=%f \n\n",NAME_NO,average);
}
void DeleteList()
{
char name[20]=;
int s0=0,r,sum=1,adr,d;
printf("\n请输入人名拼音:");
scanf("%s",name);
for (r=0;r<20;r++)
s0+=name[r];
adr=s0%M;
d=adr;
if(HashList[adr].k==s0)
{
printf("\n名称:%s 关键字:%d 查找长度为: 1",HashList[d].py,s0);
cout<<endl;
cout<<"删除成功!"<<endl;
s0=0;
HashList[d].py="";
HashList[d].k=0;
HashList[d].si=0;
}
else if (HashList[adr].k==0)
printf("无此记录!无法执行删除操作!");
else
{
int g=0;
do
{
d=(d+s0%10+1)%M;
sum=sum+1;
if (HashList[d].k==0)
{
printf("无此记录!无法执行删除操作!");
g=1;
}
if (HashList[d].k==s0)
{
printf("\n名称:%s 关键字:%d 查找长度为:%d",HashList[d].py,s0,sum);
cout<<endl;
cout<<"已删除成功!"<<endl;
s0=0;
HashList[d].py="";
HashList[d].k=0;
HashList[d].si=0;
g=1;
}
}while(g==0);
}
}
void EnterList()
{
char st[20];
char *xin;
xin=st;
int s0=0,r,sum=1,adr,d,h;
printf("\n请输入人名的拼音:");
cin>>xin;
for (r=0;*(xin+r)!='\0';r++)
{
s0=(int)(*(xin+r))+s0;
}
adr=s0%M;
d=adr;
if(HashList[adr].k==s0)
{
printf("\n名称:%s 关键字:%d 查找长度为: 1",HashList[d].py,s0);
cout<<endl;
cout<<"已存在于表中,无需插入!"<<endl;
}
else if (HashList[d].k==0)
{
printf("插入成功!");
HashList[d].py=xin;
HashList[d].k=s0;
HashList[d].si=1;
h=1;
cout<<endl;
}
else
{
int g=0,h=0;
do
{
d=(d+s0%10+1)%M;
sum=sum+1;
if (HashList[d].k==0)
{
printf("插入成功!");
HashList[d].py=xin;
HashList[d].k=s0;
HashList[d].si=sum;
h=1;
cout<<endl;
g=1;
}
if (HashList[d].k==s0)
{
printf("\n名称:%s 关键字:%d 查找长度为:%d",HashList[d].py,s0,sum);
cout<<endl;
cout<<"已存在于表中,无需插入!"<<endl;
g=1;
}
}while(g==0);
}
if(h==0)
return;
else
{
NAME_NO++;
NameList[NAME_NO-1].py=xin;
int sum=0;
int adr=(NameList[NAME_NO-1].k)%M;
int d=adr;
if(HashList[adr].si==0)
{
HashList[adr].k=NameList[NAME_NO-1].k;
HashList[adr].py=NameList[NAME_NO-1].py;
HashList[adr].si=1;
}
else
{
do
{
d=(d+NameList[NAME_NO-1].k%10+1)%M;
sum=sum+1;
}while (HashList[d].k!=0);
HashList[d].k=NameList[NAME_NO-1].k;
HashList[d].py=NameList[NAME_NO-1].py;
HashList[d].si=sum+1;
}
}
}
void main()
{
char ch1;
printf("\n 哈希表\n");
printf(" *-------------------------------------------*\n");
printf(" | A. 显示哈希表 |\n");
printf(" | B. 查找 |\n");
printf(" | C. 删除 |\n");
printf(" | D. 插入 |\n");
printf(" | E. 退出 |\n");
printf(" *-------------------------------------------*\n");
InitNameList();
CreateHashList ();
while(1)
{
printf("\n 请输入执行命令:");
fflush(stdin);
ch1=getchar();
if (ch1=='A'||ch1=='a')
Display();
else if (ch1=='B'||ch1=='b')
FindList();
else if (ch1=='C'||ch1=='c')
DeleteList();
else if (ch1=='D'||ch1=='d')
EnterList();
else if (ch1=='E'||ch1=='e')
return;
else
{
printf("\n请输入正确的选择!");
}
}
}
另外,团IDC网上有许多产品团购,便宜有口碑
㈤ 数据结构课程设计<散列表的基本运算和简单的学生信息管理系统>
ploxq
572
㈥ 数据结构课程设计:Hash表的应用 要求:扫描一个C语言源程序,用Hash表存储该程序中出现的关键字,并统计该程
先去看红黑树吧!
㈦ 课程设计 哈希表
星期 星期一 星期二 星期三 星期四 星期五
课程
上午 英语 数学版 数学 数学 语文权
语文 语文 语文 语文 数学
数学 音乐 数学 音乐 体育
美术 体育 微机 体育 语文
下午 语文 语文 语文 语文 英语
数学 数学 美术 思品 语文
语文 班会 数学 少先队 阅读
㈧ 课程设计: 使用哈希表技术判别两个源程序的相似性
可惜我不懂这个