哈希表设计-数据结构课程设计
数据结构哈希表设计

数据结构哈希表设计第一章引言哈希表是一种常用的数据结构,它可以将任意大小的数据映射到固定大小的表中。
通过这种映射关系,我们可以快速地查找、插入、删除数据。
本文将介绍哈希表的设计原理和实现方法。
第二章基本概念1.哈希函数:________哈希函数是将任意大小的数据映射到固定大小的表中的函数。
它的作用是将数据转换为一个整数,作为表中的索引。
一个好的哈希函数应该能够将不同的数据映射到不同的索引上,从而减少冲突的概率。
2.冲突解决:________由于哈希函数的映射是有限的,不同的数据可能被映射到同一个索引上,这就产生了冲突。
冲突解决方法有很多种,常见的有开放地质法和链地质法。
第三章设计原则1.散列均匀性:________好的哈希函数应该能够将数据均匀地分布在表中,减少冲突的概率。
2.内存利用率:________为了提高内存利用率,我们需要根据需求确定表的大小。
表的大小应该尽可能大,但同时又不能太大,否则会浪费内存。
3.冲突解决策略:________选择适当的冲突解决策略可以提高哈希表的性能。
常见的冲突解决策略有线性探测、二次探测和链地质法等。
第四章设计细节1.哈希函数的选择:________选择合适的哈希函数可以减少冲突的概率。
常见的哈希函数有除留余数法和乘法哈希法等。
2.冲突解决方法的选择:________针对不同的应用场景,选择适合的冲突解决方法。
例如,对于开放地质法,可以选择线性探测、二次探测或者双重散列等。
3.动态扩容:________当表的负载因子超过一定阈值时,需要进行动态扩容。
扩容的过程涉及重新计算哈希函数和重新插入数据等操作。
第五章示例代码```pythonclass HashTable:________def __init__(self):________self.size = 10self.table = for _ in range(self.size)def _hash_function(self, key):________哈希函数的具体实现hash_value = 0for char in key:________hash_value += ord(char)return hash_value % self.sizedef insert(self, key, value):________index = self._hash_function(key)self.tableindex.append((key, value)) def get(self, key):________index = self._hash_function(key)for k, v in self.tableindex:________ if k == key:________return vreturn Nonedef remove(self, key):________index = self._hash_function(key)for i, (k, v) in enumerate(self.tableindex):________if k == key:________del self.tableindexireturn Truereturn False```第六章附件本文档无附件。
数据结构哈希表设计

数据结构哈希表设计数据结构哈希表设计⒈简介哈希表是一种常见的数据结构,用于存储和查找数据。
它基于哈希函数将键映射到一个固定大小的数组索引。
在本文档中,我们将详细介绍哈希表的设计、实现和使用。
⒉哈希函数设计哈希函数是哈希表的核心,它将键转换成对应的数组索引。
以下是一些常见的哈希函数设计方法:●直接定址法:使用键的某个属性作为数组索引,例如将键的ASCII码值作为数组索引。
●除留余数法:将键除以某个数并取余,得到的余数作为数组索引。
●平方取中法:将键的平方值的中间几位数作为数组索引。
●折叠法:将键分成几个部分,然后将这些部分进行叠加或者异或操作,得到的结果作为数组索引。
⒊哈希表实现哈希表实际上是一个数组,数组的每个元素称为桶(bucket)每个桶可以存储一个键值对,或者一个链表/数组用于解决哈希冲突。
以下是哈希表的基本操作:●插入(Insert):根据键的哈希值找到对应的桶,插入键值对。
●查找(Search):根据键的哈希值找到对应的桶,查找键对应的值。
●删除(Delete):根据键的哈希值找到对应的桶,删除键值对。
⒋哈希冲突解决哈希函数的设计不能保证每个键都映射到不同的索引,因此可能会出现哈希冲突。
常见的解决哈希冲突的方法有以下几种:●链地质法:每个桶存储一个链表或者数组,具有相同哈希值的键值对存储在同一个桶中。
●开放地质法:当发生冲突时,继续探测数组中的下一个位置,直到找到一个空闲位置来存储键值对。
●再哈希法:使用多个哈希函数,当发生冲突时,使用下一个哈希函数来计算下一个索引。
⒌哈希表性能分析哈希表的性能与哈希函数的设计和冲突解决方法有关。
以下是一些常见的性能指标:●负载因子(Load Factor):表示哈希表中已经存储的键值对数量与桶的总数量之比。
负载因子越大,哈希冲突的可能性越高。
●查找时间复杂度:理想情况下,哈希表的查找时间复杂度为O(1)但在发生哈希冲突时,可能需要遍历链表或者进行探测,导致查找时间复杂度增加。
数据结构课程设计-哈希表建立职工管理系统

一.问题描述职工的姓名通过哈希表建表,基于哈希表的查找,建立一个简单的职工管理系统。
可以利用自己的班集体中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。
对将班上同学看做职工进行管理,包括插入、删除、查找、排序等功能。
二.基本要求假设人名为中国姓名的汉语拼音形式。
待填入哈希表的人名共有30个,取平均查找长度的上限为2。
哈希函数用除留余数法构照,用链表法处理冲突。
职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。
(2)删除一名职工:从职工管理文件中删除一名职工对象。
(3)查询:从职工管理文件中查询符合某些条件的职工。
(4)修改:检索某个职工对象,对其某些属性进行修改。
(5)排序:按某种需要对职工对象文件进行排序。
三.数据结构的设计哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。
也就是说,它通过把关键码值映射到表中一个位置来访问记录,加快查找的速度。
这个映射函数叫做散列函数,存放记录的数组叫做哈希表。
1.哈希表的构造方法多种多样,实际工作中需视不同的情况采用不同的哈希函数,经常在构建一个哈希表选择构造方法时需要考虑的因素有:计算哈希函数所需时间、关键字的长度、哈希表的大小、关键字的分布情况、记录的查找频率等。
本次题目要求采用除留余数法构造哈希函数,一般方法如下:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。
即 H(key) = key MOD p,p<=m不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。
对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。
由于职工主要以姓名为标志,于是将职工姓名的汉语拼音所对应的ASCII码进行相加,所得到的和作为关键字;取p等于表长30,则关键字除以30以后所得到的余数便是哈希地址。
数据结构课程设计哈希表实验报告

数据结构课程设计哈希表实验报告数据结构课程设计哈希表实验报告福建工程学院课程设计课程:算法与数据结构题目:哈希表专业:网络工程班级: xxxxxx班座号: xxxxxxxxxxxx姓名: xxxxxxx12 月 31 日实验题目:哈希表一、要解决的问题针对同班同学信息设计一个通讯录,学生信息有姓名,学号,电话号码等。
以学生姓名为关键字设计哈希表,并完成相应的建表和查表程序。
基本要求:姓名以汉语拼音形式,待填入哈希表的人名约30个,自行设计哈希函数,用线性探测再散列法或链地址法处理冲突;在查找的过程中给出比较的次数。
完成按姓名查询的操作。
运行的环境:Microsoft Visual C++ 6.0二、算法基本思想描述设计一个哈希表(哈希表内的元素为自定义的结构体)用来存放待填入的30个人名,人名为中国姓名的汉语拼音形式,用除留余数法构造哈希函数,用线性探查法解决哈希冲突。
建立哈希表而且将其显示出来。
经过要查找的关键字用哈希函数计算出相应的地址来查找人名。
经过循环语句调用数组中保存的数据来显示哈希表。
三、设计1、数据结构的设计和说明(1)结构体的定义typedef struct //记录NA name;NA xuehao;NA tel;}Record;录入信息结构体的定义,包含姓名,学号,电话号码。
typedef struct //哈希表{Record *elem[HASHSIZE]; //数据元素存储基址int count; //当前数据元素个数int size; //当前容量}HashTable;哈希表元素的定义,包含数据元素存储基址、数据元素个数、当前容量。
2、关键算法的设计(1)姓名的折叠处理long fold(NA s) //人名的折叠处理{char *p;long sum=0;NA ss;strcpy(ss,s); //复制字符串,不改变原字符串的大小写strupr(ss); //将字符串ss转换为大写形式p=ss;while(*p!='\0')sum+=*p++;printf("\nsum====================%d",sum);return sum;}(2)建立哈希表1、用除留余数法构建哈希函数2、用线性探测再散列法处理冲突int Hash1(NA str) //哈希函数{long n;int m;n=fold(str); //先将用户名进行折叠处理m=n%HASHSIZE; //折叠处理后的数,用除留余数法构造哈希函数return m; //并返回模值}Status collision(int p,int c) //冲突处理函数,采用二次探测再散列法解决冲突{。
哈希表--数据结构课设

洛阳理工学院课程设计说明书课程名称数据结构设计课题哈希表的设计与实现专业班级学号姓名完成日期 2课程设计任务书设计题目:哈希表的设计与实现设计内容与要求:设计哈希表实现电话号码查询系统。
[基本要求]1、设每个记录有下列数据项:电话号码、用户名、地址;2、从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;3、采用再哈希法解决冲突;4、查找并显示给定电话号码的记录;5、查找并显示给定用户名的记录。
6、在哈希函数确定的前提下,考察平均查找长度的变化。
指导教师:2014 年课程设计评语成绩:指导教师:年月日【问题描述】如何设计一个结构体数组使该数组中每个元素包含电话号码、用户名、地址。
如何分别以电话号码和用户名为关键字建立哈希表。
如何利用线性探测再散列法解决冲突。
如何实现用哈希法查找并显示给定电话号码的记录。
如何查找并显示给定用户的记录。
手工计算查找不成功的平均查找长度。
【基本要求】设计哈希表实现电话号码查询系统。
设计程序完成以下要求:(1)、设每个记录有下列数据项:电话号码、用户名、地址;(2)、从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;(3)、采用再哈希法解决冲突(4)、查找并显示给定电话号码的记录;(5)、查找并显示给定用户的记录。
(6)、在哈希函数确定的前提下,考察平均查找长度的变化。
【测试数据】1.用户名:weiguo,号码:123,地址:gansu2.用户名:zhangkui,号码:321,地址:shanxi【算法思想】进入主函数,用户输入1:输入哈希表元素,然后再选择2或者3按照用户名或者电话号码散列,在这下面又有分支语句选择解决冲突的办法,用线性探测再散列还是再哈希法。
生成哈希表之后,选择查找操作3分别以用户名和电话号码为关键字进行查找。
最后,输出查找不成功的平均查找长度。
在本程序当中用了两种解决冲突的办法,分别是线性探测再散列和再哈希法。
哈希函数构造方法是,除留余数法。
数据结构课程设计报告——哈希表实现电话号码查询

数据结构课程设计报告一、需求分析1问题描述:根据需要设计出合理的函数,并由此建立相应的表。
要求:1)每个电话用户信息包括(姓名,电话,住址)信息。
2)可以使用姓名与地址查找相应的用户信息。
3)使用表实现。
使用开放定址法解决冲突。
2 基本要求:1)记录每个用户的姓名、地址和电话。
2)从键盘输入,以姓名和地址为关键字分别建立表。
3)用开放地址法解决冲突。
4)分别按姓名和地址查找并显示电话号码。
二、概要设计三、详细设计定义结构表{定义表内的所有成员}[];( x[])关键字转换为数值{求字符数组x每个字符对应的值的绝对值之和,并返回最后结果}( )创建表{创建表,并初始化它}( d) 按姓名插入{以姓名为关键字,调用关键字转换函数将对应的电话号码存储到相应的存储空间。
若该位置已经被存储,则向后移一位(当移到最后一位,就移到头部继续)。
若还有冲突重复上一步。
当所有空间都查过一遍,发现没有空位,则输出“没有存储空间”。
}( d)按地址插入{以地址为关键字,调用关键字转换函数将对应的电话号码存储到相应的存储空间。
若该位置已经被存储,则向后移一位(当移到最后一位,就移到头部继续)。
若还有冲突重复上一步。
当所有空间都查过一遍,发现没有空位,则输出“没有存储空间”。
}( )表插入{输入用户姓名、地址和电话,分别调用按姓名插入和按地址插入函数进行插入。
重复上面的步骤,直到你不想继续或空间已满。
}( )按姓名查找{输入你想要查询的姓名,对它进行转换,再查找。
若该位置不空或求得的关键字所对应的数值与该位置的数值不相等,则向后移一位(当移到最后一位,就移到头部继续)。
若还有冲突重复上一步。
当所有空间都查过一遍,发现没有找到,则输出“不存在”。
若该位置空,则输出“不存在”。
若查找到,则输出电话号码。
}( )按地址查找{输入你想要查询的地址,对它进行转换,再查找。
若该位置不空或求得的关键字所对应的数值与该位置的数值不相等,则向后移一位(当移到最后一位,就移到头部继续)。
哈希表—课程设计

成绩南京工程学院课程设计说明书(论文)题目哈希表的设计与性能分析课程名称数据结构院(系、部、中心)通信工程学院专业信息工程班级 K信息091学生姓名翟珂学号 240092610设计地点信息楼C213指导教师吴海涛设计起止时间:2011年8月29日至2011年9 月9 日目录1.功能描述(或设计目标)2.总体设计(或概要设计)2.1数据结构描述与定义2.2模块设计3.测试结果与分析 (8)4.课程设计总结 (9)参考文献: (10)附录: (11)1.功能描述(或设计目标)哈希表的设计与性能分析要求:(1)数据结构的定义(2)哈希表中,哈希函数构造方法多种多样,同时对于同一哈希函数解决冲突的方法也可以不同。
两者是影响查询算法性能的关键因素。
对于几种典型的哈希函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响(平均查找长度). 处理冲突的实际含义是:为产生冲突的地址寻找下一个哈希地址。
(1)开放定址法 为产生冲突的地址H(key)求得一个地址序列: H0, H1, H2, …, Hs 1≤s≤m-1 其中:H0 = H(key) Hi = ( H(key) + di ) MOD m i=1, 2, …,s(2)链地址法 将所有哈希地址相同的记录都链接在同一链表中。
线性探测容易产生二次聚集,链地址肯定不会产生二次聚集。
一次聚集的产生主要取决于哈希函数,在哈希函数均匀的前提下,可以认为没有一次聚集。
2.总体设计(或概要设计)第 3 页共18 页2.1数据结构描述与定义除数余留法#define hashlen 11 //哈希表长Int h[hashlen]={0}; //初始哈希表int status[hashlen]={0}; //状态数组用链地址法数据结构定义:typedef struct employee{int key_code;struct employee *next;}Employee;typedef struct hashtable{int key;struct employee *next;}HashTable[MAX];2.2模块设计系统共分几个模块,每个模块的算法描述及流程图(核心模块)除数余留法:Hash_Create:第 5 页共18 页Hash_Serach:链地址法:Hash_Create::Hash_Serach:3.测试结果与分析:第9 页共18 页4.课程设计总结为期4天的数据结构课程设计结束了,时间真的很快,觉得自己这次真的获得了很多。
数据结构哈希表设计

数据结构哈希表设计1.引言哈希表(Hash Table)是一种常用的数据结构,用于快速存储和检索数据。
它通过将键(Key)映射到值(Value)来实现高效的数据存储和查找。
本文将介绍哈希表的设计原理和实现方法,以及一些常见的应用场景。
2.哈希函数的选择哈希函数是实现哈希表的关键,它将键映射到哈希值。
一个好的哈希函数应当具有以下特点:●均匀性:对于任意的输入,哈希函数应该能够将其均匀地映射到哈希表的各个位置,避免产生过多的冲突。
●高效性:哈希函数应当能够在常数时间内计算出哈希值,避免影响哈希表的性能。
●低冲突性:哈希函数应当能够尽可能少的冲突,即不同的键经过哈希函数计算得到相同的哈希值的概率应当很低。
3.冲突解决方法由于哈希函数的有限性,不同的键可能会产生相同的哈希值,这种情况称为冲突。
常见的冲突解决方法有以下几种:●链地质法(Chning):将哈希表的每个位置引入链表,当多个键映射到相同的位置时,将它们存储在链表中。
●开放寻址法(Open Addressing):当发生冲突时,通过一定的方法在哈希表中寻找下一个可用的位置,直到找到一个空位置或者遍历完整个哈希表。
●再哈希法(Rehashing):当发生冲突时,通过应用另一个哈希函数来计算出一个新的哈希值,以此来解决冲突。
4.哈希表的操作哈希表支持以下几种操作:●插入(Insert):将一个键值对插入到哈希表中。
●删除(Delete):从哈希表中删除指定的键值对。
●查找(Search):根据给定的键,在哈希表中查找对应的值。
●更新(Update):根据给定的键,更新哈希表中对应的值。
5.哈希表的应用哈希表广泛应用于各种场景,例如:●缓存:哈希表可以用于实现高效的缓存系统,根据请求的键值对快速查找到对应的数据。
●字典:哈希表可以被用作实现字典,将单词与其定义相关联。
●数据库索引:哈希表可以用于构建数据库的索引,提高数据的检索性能。
6.总结哈希表是一种高效的数据结构,通过将键映射到值来实现快速的数据存储和检索。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实习6、哈希表设计一、需求分析1. 问题描述针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度均不超过R,完成相应的建表和查表顺序。
2. 基本要求假设人名为中国人姓名的汉语拼音形式。
待填入哈希表的人名共有30个,取平均查找长度的上限为2。
哈希函数用除留余数法构造,用伪随机探测再散列法处理冲突。
3. 测试数据取读者周围较熟悉的30个人的姓名。
4. 实现提示如果随机数自行构造,则应首先调整好随机函数,使其分布均匀。
人名的长度均不超过19个字符(最长的人名如:庄双双(Zhuang Shuangshuang))。
字符的取码方法可直接利用C语言中的toascii函数,并可先对过长的人名先作折叠处理。
二、概要设计ADT Hash {数据对象D:D是具有相同特征的数据元素的集合。
各数据元素均含有类型相同,可唯一标识数据元素的关键字。
数据关系R:数据元素同属一个集合。
InitNameTable()操作结果:初始化姓名表。
CreateHashTable()操作结果:建立哈希表。
DisplayNameTable()操作结果:显示姓名表。
DisplayHashTable()操作结果:显示哈希表。
FindName()操作结果:查找姓名。
}ADT Hash三、详细设计(源代码)(使用C语言)#include<stdio.h>#include<time.h>//time用到的头文件#include<stdlib.h>//随机数用到的头文件#include<ctype.h>//toascii()用到的头文件#include<string.h>//查找姓名时比较用的头文件#define HASH_LEN 50//哈希表的长度#define P 47//小于哈希表长度的P#define NAME_LEN 30//姓名表的长度typedef struct{//姓名表char *py; //名字的拼音int m; //拼音所对应的}NAME;NAME NameTable[HASH_LEN]; //全局定义姓名表typedef struct{//哈希表char *py; //名字的拼音int m; //拼音所对应的ASCII总和int si; //查找长度}HASH;HASH HashTable[HASH_LEN]; //全局定义哈希表int d[30],i,j; //全局定义随机数,循环用的i、jvoid InitNameTable(){//姓名表的初始化NameTable[0].py="caowukui";NameTable[1].py="langzhijie";NameTable[2].py="dongshuliang";NameTable[3].py="qiuhouyang";NameTable[4].py="zhangxu";NameTable[5].py="duhuan";NameTable[6].py="fanqing";NameTable[7].py="songxiaofei";NameTable[8].py="dutongtong";NameTable[9].py="sunhaohao";NameTable[10].py="shanjianfeng";NameTable[11].py="wangbaoshan";NameTable[12].py="houfeng";NameTable[13].py="hujiaming";NameTable[14].py="jiangkaiqiang";NameTable[15].py="xuyang";NameTable[16].py="lvdelu";NameTable[17].py="shenjinfeng";NameTable[18].py="xuhui";NameTable[19].py="hanle";NameTable[20].py="xunwenwen";NameTable[21].py="chenhongcong";NameTable[22].py="zhangyanyan";NameTable[23].py="nieyanshun";NameTable[24].py="haopengcheng";NameTable[25].py="yuhaiyuan";NameTable[26].py="shuxiang";NameTable[27].py="sunyingjie";NameTable[28].py="wangbo";NameTable[29].py="zhaoqing";NameTable[30].py="zhangshengqian";for (i=0;i<NAME_LEN;i++) //将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字{int s=0;char *p=NameTable[i].py;for (j=0;*(p+j)!='\0';j++)s+=toascii(*(p+j));NameTable[i].m=s;}}void CreateHashTable(){//建立哈希表for(i=0;i<HASH_LEN;i++)HashTable[i].py="\0";HashTable[i].m =0;HashTable[i].si=0;}for(i=0;i<NAME_LEN;i++){int sum=1,j=0;int adr=(NameTable[i].m)%P; //除留余数法H(key)=key MOD p,p<=mif(HashTable[adr].si==0) //如果不冲突,将姓名表赋值给哈希表{HashTable[adr].m =NameTable[i].m;HashTable[adr].py=NameTable[i].py;HashTable[adr].si=1;}else //如果冲突{while(HashTable[adr].si!=0){adr=(adr+d[j++])%HASH_LEN; //伪随机探测再散列法处理冲突sum=sum+1; //查找次数加1}HashTable[adr].m =NameTable[i].m; //将姓名表复制给哈希表对应的位置上HashTable[adr].py=NameTable[i].py;HashTable[adr].si=sum;}}}void DisplayNameTable(){//显示姓名表printf("\n地址\t\t 姓名\t\t 关键字\n");for (i=0;i<NAME_LEN;i++)printf("%2d %18s \t\t %d \n",i,NameTable[i].py,NameTable[i].m);}void DisplayHashTable(){// 显示哈希表float asl=0.0;printf("\n\n 地址\t\t 姓名\t\t 关键字\t 搜索长度\n"); //显示的格式for (i=0;i<HASH_LEN;i++){printf("%2d %18s \t\t %d\t\t %d\n",i,HashTable[i].py,HashTable[i].m,HashTable[i].si);asl+=HashTable[i].si;}asl/=NAME_LEN;//求得ASLprintf("\n\n平均查找长度:ASL(%d)=%f \n",NAME_LEN,asl);}void FindName()char name[20]={0};int s=0,sum=1,adr;printf("\n请输入想要查找的姓名的拼音:");scanf("%s",name);getchar();for (j=0;j<20;j++)//求出姓名的拼音所对应的ASCII作为关键字s+=toascii(name[j]);adr=s%P; //除留余数法j=0;if(HashTable[adr].m==s&&!strcmp(HashTable[adr].py,name)) //分3种情况进行判断,并输出超找结果printf("\n姓名:%s 关键字:%d 查找长度为: 1\n",HashTable[adr].py,s);else if (HashTable[adr].m==0)printf("没有想要查找的人!\n");else{while(1){adr=(adr+d[j++])%HASH_LEN;//伪随机探测再散列法处理冲突sum=sum+1; //查找次数加1if(HashTable[adr].m==0){printf("没有想要查找的人!\n");break;}if(HashTable[adr].m==s&&!strcmp(HashTable[adr].py,name)){printf("\n姓名:%s 关键字:%d 查找长度为:%d\n",HashTable[adr].py,s,sum);break;}}}}int main(){//主函数char c;int a=1;srand((int)time(0));for(i=0;i<30;i++)//用随机函数求得伪随机数列d[i](在1到50之间)d[i]=1+(int)(HASH_LEN*rand()/(RAND_MAX+1.0));InitNameTable();CreateHashTable();printf("*******************************************************\n");printf("* *\n");printf("* 哈希表设计*\n");printf("* *\n");printf("* A: 显示姓名表B: 显示哈希表*\n");printf("* *\n");printf("* C: 查找D: 退出*\n");printf("* *\n");printf("*******************************************************\n");while(a){printf("\n请选择:");scanf("%c",&c);getchar();switch(c)//根据选择进行判断,直到选择退出时才可以退出{case 'A':case 'a':DisplayNameTable();break;case 'B':case 'b':DisplayHashTable();break;case 'C':case 'c':FindName();break;case 'D':case 'd':a=0;break;default:printf("\n请输入正确的选择!\n");break;}}return 0;}四、调试分析编译环境为CodeBlocks。