C语言:实现哈希表的构造和查找算法,要求:用除留余数法构造哈希函数,分别用一次探测再散列、二次探测再散列解决冲突。

本文主要是介绍C语言:实现哈希表的构造和查找算法,要求:用除留余数法构造哈希函数,分别用一次探测再散列、二次探测再散列解决冲突。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include<stdio.h>
#include<stdlib.h>
#include<math.h>#define NULLKEY -1
typedef struct{int key;
}KeyType;
typedef struct{KeyType *elem;//表示生成的空间的首地址int count;	//哈希表元素个数 int sizeindex;	//哈希表长度 
}HashTable;void Hash(HashTable *H){int i,key,p,q,j;printf("输入元素:\n");for(i=0;i<H->count;i++){j=1;scanf("%d",&key);p=key%H->sizeindex;if(H->elem[p].key==NULLKEY)H->elem[p].key=key;else{q=p;while(H->elem[p].key!=NULLKEY){p=(q+j)%H->sizeindex;j++;	}H->elem[p].key=key;}
}
}void Hash2(HashTable *H,int k[11]){int i,key,p,q,j;printf("输入元素:\n");for(i=0;i<H->count;i++){j=1;scanf("%d",&key);p=key%H->sizeindex;if(H->elem[p].key==NULLKEY)H->elem[p].key=key;else{q = p;while(H->elem[p].key!=NULLKEY&&p>-1){p=(q+k[j])%H->sizeindex;j++;}H->elem[p].key=key;}}
}void InitHash(HashTable *H){int i;printf("输入哈希表的元素个数及长度:\n");scanf("%d%d",&H->count,&H->sizeindex);	H->elem=(KeyType *)malloc(H->sizeindex * sizeof(KeyType)); //申请内存for(i=0;i<H->sizeindex;i++)H->elem[i].key=NULLKEY;	
}void print(HashTable H){int i=0;for(i=0;i<H.sizeindex;i++){printf("%d ",H.elem[i].key);}
}int SearchHash(HashTable H,int key){int i;//p=key%H.sizeindex;for(i=0;i<H.sizeindex;i++){if(H.elem[i].key==key) return i;}
}int main(){int n ,key;int k[11] = {0,1,-1,4,-4,9,-9,16,-16,25,-25};HashTable H;InitHash(&H);printf("请选择:一次散列:1;二次散列:2");printf("\n");scanf("%d",&n);if(n==1) Hash(&H);else Hash2(&H,k);printf("\n输出哈希表:\n");print(H);printf("\n输入要查找的key:\n");scanf("%d",&key);int i=SearchHash(H,key);printf("位置是%d",i);return 0;
}

 这里二次散列用了数组,如果哈希表太大则不能用

仅供参考

这篇关于C语言:实现哈希表的构造和查找算法,要求:用除留余数法构造哈希函数,分别用一次探测再散列、二次探测再散列解决冲突。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_64687170/article/details/128105244
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/325116

相关文章

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

CentOS 7 YUM源配置错误的解决方法

《CentOS7YUM源配置错误的解决方法》在使用虚拟机安装CentOS7系统时,我们可能会遇到YUM源配置错误的问题,导致无法正常下载软件包,为了解决这个问题,我们可以替换YUM源... 目录一、备份原有的 YUM 源配置文件二、选择并配置新的 YUM 源三、清理旧的缓存并重建新的缓存四、验证 YUM 源

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性