来源:蜘蛛抓取(WebSpider)
时间:2016-06-11 10:06
标签:
迅雷看看崩溃
数据结构哈希表,求大神,急急急_百度知道
数据结构哈希表,求大神,急急急
以下关键字序列建立哈希表{16,38},49,58,36,24,50,26,画出此哈希表,用二次探测再散列法处理冲突,45,29:请给出哈希函数,55,要求填充率为80%,37
提问者采纳
system(&%d&\
q=(p-i*i)%HASHSIZE;
if((fp=fopen(&elem[pp];):\在通讯录里修改某人信息{
int p:CreateHash(H,H-&
(H-&n学号.h&);i&cls&Modify(H;)!=NULL)&&(eq(NAME;在通讯录里查找姓名关键字;);cls",a[i]; m=(int)name[0];elem[pp],c),c);请输入修改后记录的电话号码!='请输入第%d个记录的姓名;)
fprintf(;elem[pp]-&);
printf(&.\姓名; system(&&\);name)==1)
printf(&\/,H-&
/elem[i]-&elem)[i];
case 3;;;NUM_BER;/);
scanf(&);n&若哈希地址冲突;;}void getin(Stu * a)
//\,c),以人的姓名为关键字;
printf(& typedef 掩饰数组类型typedef struct
/,H-&调用DOS命令CLS能够清屏 printf("!;
while((H-&tel).
显示所有用户信息
*",i+1);\
printf(&人名的最大长度#define HASHSIZE 60
} m=m%HASHSIZE;0)
printf(&\i++)
c=0,a[i],int c)
/\,你能在n*
switch(num)
printf(&);cou++;
getchar();t%s\:%s\n&n请输入要查找记录的姓名;n&在通讯录里查找姓名关键字;/;;
scanf(",i+1;\
system(&pause",H-&
/,H-&数据元素存储基址);
/n",将信息存入
H->:%s\/n*
/tel);n电话号码;n&
printf(".name),H-&),&num);NUM_BER;n*
scanf(",Stu* a)
/CLS"!:\:%s\!=NULL&&eq(请输入%d个记录的学号,a[i];;i<,传入一个record的指针;
printf(&NA NAME:\,i+1);打开文件 {
fclose(fp1);elem[pp],a[i]; system(&);NA\,H->,str),&/);n此人不存在;
printf(",H->,若查找成功;n学号,",NA y){ if(strcmp(x,c);t%s",NAME);n&;);;请输入%d个记录的学号:c=0.tel);&关闭文件 } else {
fp2=fopen("!;i&请输入第%d个记录的电话号码,然后针对这个指针指向的内存记录进行操作{请输入修改后记录的学号,H-&n&;HASHSIZE;elem[pp]!&,建立相应的哈希表{n*
【9】:Create(a) ;/\:Save(H);
case 2,NAME);求得哈希地址;):%s\%d&
scanf(&n&);
printf(".
修改用户信息
*",i+1);/
H-&n***************************班级通讯录****************************&n此哈希表容量为%d;n\记录{ NA
printf("!;
case 8;); break,H-&如果不存在;#include&n学号:%s\n&);/\t学号\,i+1)!=NULL)
fprintf(\,H-&elem)[pp]-&,a[i];
printf(&n输入要添加的个数;name)==1)
printf("!=NULL&&eq(NAME;
scanf(",c)!=NULL&&eq(NAME;
case 9;:output(a),显示信息{n&i&;
printf(&n以下是您需要修改的信息,),int c)
/,c):return 0,int c)
/ i = 1;\}Status collision(/ else return UNSUCCESS;%s&
m++;elem[pp]-&stdio. printf(&
printf(&第%d记录无法解决冲突&elem[pp]->,当前表内存储的记录个数为%d;
} } system(&需要显示冲突次数时输出tel);2+1;n*****************************************************************&0':\二次探测法处理冲突{\/
m=0,p,HASHSIZE:getin(a);/n电话号码;
删除用户信息
*&2+1;):%s\ printf(&建表;\,c);0'siz=HASHSIZE;n*
【2】;elem[i]-&elem[pp]-&添加成功;将记录保存到指定文件{
system(&;姓名;;
fclose(fp););学生电话号码,c);n查找成功,a[i];cou=0;/%s&/
system(".
printf(&创建新的通讯录{ system(":%s\
for(i=0:\
while((H-&Status eq(NA x:%s\.h&;);
fprintf(fp,H-&
scanf(&void Create(Stu* a)
/输入错误;);;
if(q&elem[pp]-&/%s& while(i<,i+1).txt".xuehao);姓名;%d&n",c用来记录冲突次数;}void SearchHash(HashTable* H,int c)
printf(&\
printf(&elem[pp]->,i=0;第%d个记录冲突次数为%d:\);cls&;;NUM_BER+NUM_BER1.
创建用户信息
*",删除不成功;
H-&=0)%s&}void CreateHash(HashTable* H;\,H-&/
for(i=0!成功储存.tel)!\elem[pp]-&n姓名\
} else printf(",就创建一个);\n*****************************************************************&elem[pp]-&n以下是您需要要删除的信息; for( i=0;);r&
p=Hash(a[i]:\\tel)==-1))
pp=collision(p;/,i+1).h&n&,a[i];
if(H-&),H-&\!=NULL)
/#include&,*fp2,a[i];%s",c);
scanf(&);/t电话号码&);n&)).name);
/***********************************************\%s&;\ i=c/n&删除成功,m;);name);name,":
*",进行冲突处理 for(i=0;
printf(&i++)
if((H-&xuehao); NA xuehao,修改不成功;
p=Hash(NAME);
printf(&n&n*
温馨提示;}void Modify(HashTable* H;);
fprintf(0');tel)==1)
printf(&w&),&
printf(&}S if((fp1=fopen(":%s\调用DOS命令CLS能够清屏 /
printf(& scanf("!=NULL)
pp=collision(p;/tel);n*
【6】:\t\
i=c/,q; \for(i=0;
scanf(&/\
printf(".txt找到相应纪录\强制转化成数字 while(name[i];);
HashTable *H;>。\,y)==0)
return SUCCESS;
/name),进行冲突处理
if(pp&}void Delete(HashTable* H; n&;
scanf(",跳入下一循环
printf(&);elem[pp]-&抱歉;;n&i++)
H-&elem[pp]-&cou);w".
以姓名建立哈希表(二次探测法解决冲突)*&
FILE*;当前容量}HashTable,
scanf(&请输入修改后记录的姓名;#define MAXSIZE
20#define MAX_SIZE 20
printf(&i&
/\); FILE *fp1;
system(",c);%s&\!=NULL)&&(eq(NAME;);
return UNSUCCESS;),
/%s&),若查找成功;);n电话号码;Delete(H;);n&n*
【1】; return 0,请重新输入;
printf(&pause&\
printf(&i++) {
printf(&elem[i]->,H-&
case 7;n&n&
printf(&elem[i]=NULL;无法解决冲突;/建立哈希表{ Stu *elem[HASHSIZE];elem[pp]-&);%s&tel[0]='
printf(&elem[pp]-&关键字 NA
/n&n建表完成.
查找用户信息
*"!\ }
printf(&/cls".
for(i=0;);n&/cls",",a);n*
【3】;name)==-1))
pp=collision(p;n":\!='!;;
q=(p+i*i)%HASHSIZE;n&/n此人不存在;
pp=p;elem[pp],a[i];name[0]='记录的个数
全局变量Status NUM_BER1;
printf(",&NUM_BER);2+1;n&
} while (1) {;;n&定义表长#define SUCCESS 1#define UNSUCCESS -1typedef int Status,i+1);\/若哈希地址冲突!\\;xuehao);/);
else i=c/:\
while((H-&n查找过程冲突次数为%d.以下是您需要要查找的信息:%s\,查找不成功;}Status NUM_BER;pause&\
fprintf(当前数据元素个数 int siz:c=0;n".name);录入通讯录的内容.tel);n&
(H-&);n&elem)[pp]-&/cls&
/):\elem[pp];n此人不存在;n&n&elem[pp]-&elem[pp]=&(a[i]);elem[pp]->:c=0.
添加用户信息
*&\n\==================== 班级通讯录 ===================\0'
c++;n",&
/,H-&n请输入一个任务选项&请输入第%d个记录的电话号码;n恭喜你;
int i!\修改成功;请输入第%d个记录的姓名;n&%s&/!&}void Save(HashTable * H)
/SearchHash(H;elem[pp];
printf(&);
printf(&}int Hash(NA name){ int i,H-&
if(H->,保存记录失败:\.txt&record,H-&学生学号;;elem[pp]-&t\ }}void output(Stu* a)
/;为现有类型添加一个同义字typedef char NA[MAX_SIZE];xuehao:%s\!&
p=Hash(NAME),p=-1;
case 5;/#include<,&
pp=p:%s\i++)
printf("!\CLS&n%s\\
printf("、5;
printf(":\,H-&\,
/tel);学生姓名、6操作前 请先输出3
*&n",显示信息然后删除{输入要添加的个数;n",&NUM_BER);)););
printf(&elem[pp]->!\,采用二次探测法解决冲突
/,c;\/elem[pp]-&
p=Hash(str);\
} }int main(){
Stu a[MAXSIZE];
/n请输入要删除记录的姓名;
printf(",H-&HASHSIZE;HASHSIZE)
if(c%2==0)
c++:\%s&
/.n请输入要修改记录的姓名;
printf(&i&\)
m+=(int)name[i];显示输入的用户信息{\;););
if(q&);elem[pp]-&冲突处理函数; } printf(&!;
printf("!=NULL)&&(eq(.txt
fclose(fp2);NA NAME;
H=(HashTable*)malloc(sizeof(HashTable));n*
【5】,&/;\,H-&
system(&;%s&);查找表中记录类型typedef struct
/==================== 班级通讯录 ===================\NUM_BER;=0) return q.xuehao);n*
【4】:&name)==-1))
pp=collision(p;
printf(",flag=1;n\
while(H->:\!&);
printf(&i++)
printf(&/.txt":\
提问者评价
虽然要的不是代码,但是,阿里嘎都
来自团队:
其他类似问题
为您推荐:
哈希表的相关知识
其他2条回答
要是有钱就好使了。
你要多少,我给你烧。。
不会。。。。。。。。。。。。。。。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁