资源简介
散列表的设计与实现
设计散列表实现电话号码查找系统。
【基本要求】
1) 设每个记录有下列数据项:电话号码、用户名、地址;
2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;
3) 采用一定的方法解决冲突;
4) 查找并显示给定电话号码的记录;
5) 查找并显示给定用户名的记录。
自己做的 很好的 报告也有
代码片段和文件信息
///////////////////////////////////////////////////////////////
////////////////////哈希表的设计与实现////////////////////////
/////////////////////////////软件08-2 王 华/////////////////
/////////////////////////////软件08-2 刘孟奇////////////////
#include
#include
#include
#include
#include
#define MAXSIZE 20 //电话薄记录数量
#define MAX_SIZE 20 //人名的最大长度
#define HASHSIZE 53 //定义表长
#define SUCCESS 1
#define UNSUCCESS -1
#define LEN sizeof(HashTable)
typedef int Status;
typedef char NA[MAX_SIZE];
typedef struct{//记录
NA name;
NA tel;
NA add;
}Record;
typedef struct{//哈希表
Record *elem[HASHSIZE]; //数据元素存储基址
int count; //当前数据元素个数
int size; //当前容量
}HashTable;
Status eq(NA xNA y){//关键字比较,相等返回SUCCESS;否则返回UNSUCCESS
if(strcmp(xy)==0)
return SUCCESS;
else
return UNSUCCESS;
}
Status NUM_BER; //记录的个数
void getin(Record* a){//键盘输入各人的信息
printf(“输入要添加的个数:\n“);
scanf(“%d“&NUM_BER);
int i;
for(i=0;i
printf(“请输入第%d个记录的用户名:\n“i+1);
scanf(“%s“a[i].name);
printf(“请输入%d个记录的电话号码:\n“i+1);
scanf(“%s“a[i].tel);
printf(“请输入第%d个记录的地址:\n“i+1);
scanf(“%s“a[i].add);
}
}
void ShowInformation(Record* a)//显示输入的用户信息
{
int i;
for( i=0;i printf(“\n第%d个用户信息:\n 姓 名:%s\n 电话号码:%s\n 联系地址:%s\n“i+1a[i].namea[i].tela[i].add);
}
void Cls(Record* a){ //清屏
printf(“*“);
system(“cls“);
}
long fold(NA s){//人名的折叠处理
char *p;
long sum=0;
NA ss;
strcpy(sss);//复制字符串,不改变原字符串的大小写
strupr(ss);//将字符串ss转换为大写形式
p=ss;
while(*p!=‘\0‘)
sum+=*p++;
return sum;
}
int Hash1(NA str){//哈希函数
long n;
int m;
n=fold(str);//先将用户名进行折叠处理
m=n%HASHSIZE; //折叠处理后的数,用除留余数法构造哈希函数
return m; //并返回模值
}
int Hash2(NA str){//哈希函数
long n;
int m;
n = atoi(str);//把字符串转换成整型数.
m=n%HASHSIZE; //用除留余数法构造哈希函数
return m; //并返回模值
}
Status collision(int pint &c){//冲突处理函数,采用二次探测再散列法解决冲突
int iq;
i=c/2+1;
while(i if(c%2==0){
c++;
q=(p+i*i)%HASHSIZE;
if(q>=0)
return q;
else
i=c/2+1;
}
else{
q=(p-i*i)%HASHSIZE;
c++;
if(q>=0)
return q;
else
i=c/2+1;
}
}
return UNSUCCESS;
}
void benGetTime();
void CreateHash1(HashTable* HRecord* a){//建表,以人的姓名为关键字,建立相应的散列表
//若哈希地址冲突,进行冲突处理
benGetTime();
int ip=-1cpp;
for(i=0;i c=0;
p=Hash1(a[i].name);
pp=p;
while(H->elem[pp]!=NULL) {
pp=collision(pc);
if(pp<0){
printf(“第%d记录无法解决冲突“i+1);//需要显示冲突次数时输出
continue;
}//无法解决冲突,跳入下一循环
}
H->elem[pp]=&(a[i]); //求得哈希地址,将信息存入
H->count++;
printf(“第%d个记录冲突次数为%d。\n“i+1c);//需要显示冲突次数时输出
}
printf(“\n建表完成!\n此哈希表容量为%d当前表内存储的记录个数为%d.\n“HASHSIZEH->count);
benGetTime();
}
void
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 823808 2009-12-22 13:04 课程设计-电话号码查找系统\数据结构课程设计 刘孟奇.doc
文件 822272 2009-12-22 13:04 课程设计-电话号码查找系统\数据结构课程设计王华.doc
文件 9341 2009-12-22 13:02 课程设计-电话号码查找系统\课程设计--电话号码查找系统.cpp
目录 0 2009-12-22 16:51 课程设计-电话号码查找系统
----------- --------- ---------- ----- ----
1655421 4
- 上一篇:三维建筑物漫游程序 opengl
- 下一篇:基于51单片机的教室计数系统 C语言程序
相关资源
- 数字信号处理C语言程序集DSP算法大全
- HT66Fxx flash 单片机原理与应用C语言版
- 《数据结构》清华大学C语言版内部课
- 条形码识别系统c语言版
- 《严蔚敏:数据结构题集(C语言版)
- c语言版超级玛丽(经典游戏)
- STC12C5410AD中文文档C语言版
- 《数据结构题集C语言版》严蔚敏,吴
- 数据结构C语言版第2版源代码
- 数据结构C语言版第2版课后习题答案
- 数据结构(c语言版 严蔚敏著
- [数据结构(C语言版)].严蔚敏_吴伟民
- 编译原理 课程设计 DAG 报告+源码C++版
- eDNA实时历史数据库接口功能说明及
- ECDH加密算法 c语言版
- [数据结构案例教程(c语言版)].徐翠
- 算法与数据结构——c语言版 张乃孝
- 2008年专升本考试数据结构C语言版试题
- C语言开放地址法哈希表构建
- 超级玛丽c语言版本
- 简单菜单系统C语言版
- 网络编程-----抓包程序C语言版
- 基于A*算法的十五数码程序 C语言版
- 数据结构C语言版Word
- 《数据结构》C语言版算法源码及运行
- 李春葆:数据结构习题与解析(C语言
- 数据结构习题集C语言版严蔚敏_吴伟民
- 数据结构c语言版清华大学严蔚敏pdf
- MCS-51单片机原理与应用(C语言版.
- 《数据结构》C语言版教程
评论
共有 条评论