当前位置: 首页 > news >正文

数据结构查找-哈希表(创建+查找+删除)+(C语言代码)

#include<stdlib.h>
#include<stdio.h>
#include<stdbool.h>
#define NULLKEY -1//单元为空
#define DELKEY -2//单元内容被删除
#define M 20
typedef struct
{int key;//关键字int count;//统计哈希冲突探测次数
}HashTable;
//插入到哈希表
void InsertHT(HashTable ha[], int* n, int m,int p,int key)//n为哈希表的元素个数,m为哈希表的表长总数
{int i, adr;adr = key % p;//获得插入的哈希地址if (ha[adr].key == NULLKEY || ha[adr].key == DELKEY){ha[adr].key = key;ha[adr].count = 1;}else{i = 1;do{adr = (adr + 1) % m;i++;} while (ha[adr].key != NULLKEY && ha[adr].key != DELKEY);ha[adr].key = key;ha[adr].count = i;}n++;//哈希表的元素个数
}
//创建哈希表
void CreateHT(HashTable ha[], int* n, int m, int p, int keys[],int n1)
{int i;//初始化哈希表内容for (int i = 0; i < m; i++){ha[i].key = NULLKEY;ha[i].count = 0;}n = 0;//统计插入的个数for (i = 0; i < n1; i++){InsertHT(ha, n, m, p, keys[i]);}printf("哈希表如下:\n");for (int j = 0; j < m; j++){printf("%d  比较次数 %d\n", ha[j].key,ha[j].count);}printf("\n");
}
//查找哈希表
int SearchHT(HashTable ha[],int p,int m,int n1,int key)
{int i, Hi;int HO = key % p;//求出key的哈希地址if (ha[HO].key == NULLKEY){ha->count = 1;return -1;}else if (ha[HO].key == key){ha->count = 1;return HO;}else{ha->count = 1;for (i = 1; i <= n1; i++){Hi = (HO + i) % m;if (ha[Hi].key == NULLKEY){ha->count = ha->count + i;return -1;}else if (ha[Hi].key == key){ha->count = ha->count + i;return Hi;}}}
}
//删除哈希值
bool DeleteHT(HashTable ha[], int* n, int m, int p, int key)
{int i = 1, adr;adr = key % p;while(ha[adr].key != NULLKEY && ha[adr].key != key){adr = (adr + i) % m;i++;}if (ha[adr].key == key){ha[adr].key = DELKEY;return true;}else{return false;}
}
int main()
{HashTable ha[M];int keys[] = { 19,14,23,1,68,20,84,27,55,11,10,79 };int n1 = sizeof(keys) / sizeof(keys[0]);int n;int p = 13;//哈希表的创建+打印CreateHT(ha, &n, M, p, keys, n1);//哈希表的查找int num = 79;int result = SearchHT(ha, p, M,n1, num);if (result != -1){printf("找到key = %d,位置在 %d 比较次数为%d\n", num, result,ha->count);}else{printf("没有找到key = %d , 比较次数为%d\n", num, ha->count);}//删除哈希值num = 23;DeleteHT(ha, &n, M, p, num);printf("删除后:\n");for (int j = 0; j < M; j++){if (ha[j].key != NULLKEY && ha[j].key != DELKEY){printf(" %d ", ha[j].key);}else {printf(" * ");}}printf("\n");return 0;
}

 


http://www.mrgr.cn/news/74829.html

相关文章:

  • Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)(很详细)
  • 网页直播/点播播放器EasyPlayer.js播放器关于遇到报错的时候,如何反馈给作者去定位问题
  • 2.langchain中的prompt模板 (FewShotPromptTemplate)
  • Quartus+Nios II for eclipse问题合集
  • 【Spring Boot】用 MyBatis 实现数据的 CRUD
  • Next.js 入门指南:深入构建服务器渲染的现代 Web 应用
  • Tofu识别跟踪变焦镜头控制接口与协议
  • 云服务器安装mysql8.0(阿里云或者腾讯云都可以)
  • 比高考还严?该地软考报考减少了5420人,工作人员却增加100多人!
  • 如何使用Jupyter
  • 【机器学习chp2】贝叶斯最优分类器、概率密度函数的参数估计、朴素贝叶斯分类器、高斯判别分析。万字超详细分析总结与思考
  • 真的别跟风了!PMP认证原来只对这些人有用...
  • leveldb存储token的简单实现
  • 理解 C++ 中的 `const` 关键字
  • 域名绑定服务器小白教程
  • [刷题]入门1.矩阵转置
  • MATLAB和Python及R瑞利散射
  • 37邮件服务器
  • Sorvall Legend Micro 17 微量离心机产品特性
  • 开放式耳机怎么戴?不入耳的蓝牙耳机推荐
  • 背景移除,主体物抠图模型 RMBG-2.0:最佳一键去背景模型
  • 独孤思维:负债,入不敷出,要不要投资做副业
  • 宏景人力资源信息管理系统 uploadLogo 任意文件上传漏洞复现
  • 我要成为算法高手-二分查找篇
  • 【操作系统】Linux之线程同步二(头歌作业)
  • 前端开发设计模式——责任链模式