C++实现哈希表创建、查找、显示、计算ALS(详细)(数据结构)

问题引入

        针对某个数值序列,设计一个哈希表,完成相应的建表和查表顺序。哈希函数用除留余数法构造,用线性探测再散列的方法处理哈希地址冲突。

        针对给定的数列:{23,5,17,12,26,31,13,4,6},完成哈希表的构造。具体哈希函数采用除留余数法,并用线性探测再散列的方法处理哈希地址冲突。具体为:表长为13,哈希函数为:H(key)= key MOD 13,要求:

        1)能根据给定值进行查询,判断该值在哈希表中是否存在?如果存在,输出相应的地址;否则,输出不存在。

        2)能输出哈希表中的全部内容,相应地址存储的元素为空,则不输出。

        3)能输出该表的平均查找长度ASL(假定每个元素被查找的概率都是相等的)。

代码实现

#include
#include
#define HashLength 13 //定义哈希表表长 
#define NULLKEY 0  //空哈希表元素值为0 
using namespace std; 


//定义哈希表属性、结构 
typedef struct{
	int key;            //元素的值
	int compareTimes;   //查找到该元素需要比较的次数
	int flag;           //用来标识该位置是否已经存有别的数据
}Elem;
typedef struct{
	Elem *base; //表示生成的空间的首地址 
	int count; //元素个数 
	int length; //表长 
}HashList;

//除留余数法 
int Hash(int data){
	return data%HashLength;
} 

//初始化哈希表 
void InitHash(HashList &H) {
	int i;
	H.base= (Elem *)malloc(HashLength*sizeof(Elem)); //分配存储空间 
	H.length=HashLength; //表长 
	for (i=0;i>H.count;
	for(i=0;i>key;
		Insert(H,key);
	}
}

//显示哈希表中内容 
void PrintHashList(HashList H){
	cout<<"根据实验要求,哈希表中的全部非空元素为:"<>choose;
	while(choose!=5){
		switch(choose){
			case 1:{
			CreateHashList(H);
			break;
			}
			case 2:{
				PrintHashList(H);
				break;
			}
			case 3:{
				cout<<"输入要查找的元素值:";
				cin>>key;
				n=SearchHashList(H,key);
				if(n==-1){
					cout<<"查询不到";
				}else{
					cout<>choose;
	}
}

运行结果

C++实现哈希表创建、查找、显示、计算ALS(详细)(数据结构)_第1张图片

 

你可能感兴趣的:(C++编程实例,数据结构,算法,C++,数据结构,算法,哈希表)