搜索
您的当前位置:首页哈希表实验报告完整版

哈希表实验报告完整版

来源:小侦探旅游网
哈尔滨市建筑安装工程备案表

实验报告

姓名: 学号: 1. 实验题目

针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。

基本要求:假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。 2.需求分析

本演示程序用VC编写,完成哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。

输出形式:地址,关键字,收索长度,H(key),拼音 3.概要设计

typedef struct NAME typedef struct hterm void InitNameList() void CreateHashList() void FindList() void Display() int main()

4.详细设计

#include #include

页脚内容

哈尔滨市建筑安装工程备案表

#include #define HASH_LEN 50 #define M 47 #define NAME_NO 8 typedef struct NAME {

char *py; //名字的拼音 int k; //拼音所对应的整数 }NAME;

NAME NameList[HASH_LEN];

typedef struct hterm //哈希表{

char *py; //名字的拼音 int k; //拼音所对应的整数 int si; //查找长度 }HASH;

HASH HashList[HASH_LEN]; void InitNameList() {

NameList[0].py=\"houxinming\"; NameList[1].py=\"abc\"; NameList[2].py=\"defdgf\"; NameList[3].py=\"zhangrji\"; NameList[4].py=\"jiaxin\"; NameList[5].py=\"xiaokai\"; NameList[6].py=\"liupeng\";

页脚内容

哈尔滨市建筑安装工程备案表

NameList[7].py=\"shenyonghai\";

char *f; int r,s0;

for (int i=0;if=NameList[i].py;

for (r=0;*(f+r) != '\\0';r++) //方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字 s0=*(f+r)+s0;

NameList[i].k=s0; } }

void CreateHashList() {

for ( int i=0; iHashList[i].py=\"\"; HashList[i].k=0; HashList[i].si=0; }

for ( i=0; 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; //查找次数加1 }while (HashList[d].k!=0);

HashList[d].k=NameList[i].k; HashList[d].py=NameList[i].py; HashList[d].si=sum+1; }i++; } }

void FindList() {

printf(\"\\n\\n请输入姓名的拼音: \"); //输入姓名

页脚内容

哈尔滨市建筑安装工程备案表

char name[20]={0}; scanf(\"%s\

int s0=0;

for (int r=0;r<20;r++) //求出姓名的拼音所对应的整数(关键字) s0+=name[r];

int sum=1;

int adr=s0 % M; //使用哈希函数 int d=adr;

if(HashList[adr].k==s0) //分3种情况进行判断

printf(\"\\n姓名:%s 关键字:%d 查找长度为: 1\ 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\ g=1; }

}while(g==0); } }

void Display() {

printf(\"\\n\\n地址\关键字\\搜索长度\H(key)\\拼音 \\n\"); //显示的格式 for(int i=0; i<15; i++) {

printf(\"%d \

printf(\"\%d \ printf(\"\\%d \ printf(\"\\%d \ printf(\"\ %s \ printf(\"\\n\"); }

for( i=15; i<30; i++) {

printf(\"%d \

printf(\"\%d \ printf(\"\\%d \ printf(\"\\%d \ printf(\"\ %s \

页脚内容

哈尔滨市建筑安装工程备案表

printf(\"\\n\"); }

for( i=30; i<40; i++) {

printf(\"%d \

printf(\"\%d \ printf(\"\\%d \ printf(\"\\%d \ printf(\"\ %s \ printf(\"\\n\"); }

for(i=40; i<50; i++) {

printf(\"%d \

printf(\"\%d \ printf(\"\\%d \ printf(\"\\%d \ printf(\"\ %s \ printf(\"\\n\"); }

float average=0;

for (i=0;iprintf(\"\\n\\n平均查找长度:ASL(%d)=%f \\n\\n\

页脚内容

哈尔滨市建筑安装工程备案表

}

int main() {

printf(\"\\n------------------------哈希表的建立和查找

----------------------\"); InitNameList(); CreateHashList ();

while(1) {

printf(\"\\n\\n\");

printf(\" 1. 显示哈希表\\n\"); printf(\" 2. 查找\\n\"); printf(\" 3. 退出\\n\"); err: char ch1;

scanf(\"%c\ if (ch1=='1') Display(); else if (ch1=='2') FindList(); else if (ch1=='3') return 0; else {

printf(\"\\n请输入正确的选择!\");页脚内容

哈尔滨市建筑安装工程备案表

goto err; } } }

5.调试分析 (略) 6.使用说明

程序名为hash tablet.exe,运行环境为DOS。程序执行后显示 ========================

1. 显示哈希表 2. 查找 3. 退出

======================= SELECT:

在select后输入数字选择执行不同的功能。要求首先输入足够多的插入元素,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后单链表的内容。

选择1:显示哈希表

选择2:显示请输入姓名的拼音,

要求输入要删除元素的位置,执行成功后返回元素的值。 选择3:退出程序

7.测试结果

------------------------哈希表的建立和查找----------------------

1. 显示哈希表 2. 查找

页脚内容

哈尔滨市建筑安装工程备案表

3. 退出 1

地址 关键字 搜索长度 H(key) 拼音 0 0 0 0 1 0 0 02 0 0 03 0 0 04 756 1 4 liupeng5 0 0 06 1181 1 6 shenyonghai7 0 0 08 0 0 09 0 0 010 0 0 011 0 0 012 294 1 12 abc13 1094 1 13 houxinming14 0 0 015 861 1 15 zhangrji16 0 0 017 0 0 018 0 0 019 0 0 020 0 0 021 0 0 0页脚内容

哈尔滨市建筑安装工程备案表

22 0 0 0 23 0 0 0 24 0 0 0 25 0 0 0 26 0 0 0 27 0 0 0 28 0 0 029 0 0 030 0 0 031 0 0 032 643 1 32 jiaxin33 0 0 034 0 0 035 0 0 036 0 0 037 742 1 37 xiaokai38 0 0 039 0 0 040 0 0 041 0 0 042 0 0 043 0 0 044 608 1 44 defdgf45 0 0 046 0 0 047 0 0 048 0 0 0页脚内容

哈尔滨市建筑安装工程备案表

49 0 0 0

平均查找长度:ASL(8)=1.000000

1. 显示哈希表 2. 查找 3. 退出

请输入正确的选择!2

请输入姓名的拼音: houxinming

姓名:houxinming 关键字:1094 查找长度为: 1

1. 显示哈希表 2. 查找 3. 退出

请输入正确的选择!

页脚内容

因篇幅问题不能全部显示,请点此查看更多更全内容

Top