数据结构哈希表-(开放地址法+二次探测法解决哈希冲突)(创建+删除+插入)+(C语言代码)

server/2024/11/26 1:36:26/
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define M 20
#define NULLDEL -1
#define DELDEY -2typedef struct
{int key;int count;
}HashTable;//创建和插入
void Insert(HashTable ha[], int m, int p, int key)
{int i, HO, HI;HO = key % p;if (ha[HO].key == NULLDEL || ha[HO].key == DELDEY){ha[HO].key = key;ha[HO].count = 1;}else{i = 1;do{HI = (HO + i * i) % m;i++;} while (ha[HI].key != NULLDEL && ha[HI].key != DELDEY);ha[HI].key = key;ha[HI].count = i;}
}
void Create(HashTable ha[],int m,int n1,int p,int keys[])
{int i;for (i = 0; i < m; i++){ha[i].key = NULLDEL;ha[i].count = 0;}for (i = 0; i < n1; i++){Insert(ha, m, p, keys[i]);}printf("二次探测法哈希表如下:\n");for (i = 0; i < m; i++){printf("%d  查找次数 %d 次\n", ha[i].key,ha[i].count);}
}
//查找
int Search(HashTable ha[], int m, int p, int key)
{int HO, HI;HO = key % p;if (ha[HO].key == NULLDEL){ha[HO].count = 1;return -1;}else if (ha[HO].key == key){ha[HO].count = 1;return HO;}else{ha[HO].count = 1;for (int i = 0; i < m; i++){HI = (HO + i * i) % m;//HO还是那个HO,这里变的是HI和i的值if (ha[HI].key == NULLDEL){ha->count = ha[HO].count + i;//哈希冲突的次数return -1;}else if (ha[HI].key == key){ha->count = ha[HO].count + i;return HI;}}}
}
//删除哈希值
bool deleteNode(HashTable ha[], int m, int p, int key)
{int HO,i = 1;HO = key % p;while (ha[HO].key != NULLDEL && ha[HO].key != key){HO = (HO + i * i);i++;}if (ha[HO].key == key){ha[HO].key = DELDEY;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 p = 13;Create(ha, M, n1, p, keys);int key = 79;int result = Search(ha, M, p, key);if (result!=-1){printf("找到 %d 位置在 %d 哈希冲突 %d 次\n", key, result, ha->count);}else {printf("找不到 %d 哈希冲突 %d 次\n", key, ha->count);}key = 23;deleteNode(ha, M, p, key);printf("删除 %d 元素后遍历如下:\n", key);for (int i = 0; i < M; i++){if (ha[i].key != NULLDEL && ha[i].key != DELDEY){printf(" %d ", ha[i].key);}else {printf(" * ");}}return 0;
}


http://www.ppmy.cn/server/144944.html

相关文章

ubuntu增加swap交换空间

论坛_开发者_技术论坛_鲲鹏_昇腾_华为 先关闭 &#xff0c;否则报错 fallocate: fallocate 失败: 文本文件忙 sudo swapoff /swapfile sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo vim /etc/fstab 添加…

【案例】泛微.齐业成助力北京中远大昌汽车实现数电票全流程管理

中远大昌统一发票共享平台上线三个多月以来&#xff0c;实现&#xff1a; 5000份 60000元 发票开具 成本节约 客户简介及需求分析 北京中远大昌汽车服务有限公司&#xff08;以下简称“中远大昌”&#xff09;成立于2002年&#xff0c;是中远海运集团所属香远&#xff08;北…

Java Database Connectivity (JDBC + Servlet)

https://blog.csdn.net/SuYuewu/article/details/143986880?sharetypeblogdetail&sharerId143986880&sharereferPC&sharesourceSuYuewu&spm1011.2480.3001.8118 Java Database Connectivity (JDBC)是一个Java API&#xff0c;用于与数据库进行连接和操作。通过…

微信万能门店小程序系统存在任意文件读取漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…

5、AI测试辅助-生成测试用例思维导图

AI测试辅助-生成测试用例思维导图 创建测试用例两种方式1、Plantuml思维导图版本 (不推荐&#xff09;2、Markdown思维导图版本&#xff08;推荐&#xff09; 创建测试用例两种方式 完整的测试用例通常需要包含以下的元素&#xff1a; 1、测试模块 2、测试标题 3、前置条件 4、…

鸿蒙生态崛起

1.鸿蒙生态&#xff1a;开发者的新蓝海 从开发者角度看&#xff0c;鸿蒙生态带来了巨大机遇。其分布式能力实现了不同设备间的无缝体验&#xff0c;如多屏协同&#xff0c;让应用能跨手机、平板、智能穿戴和车载设备流畅运行。开发工具也有显著提升&#xff0c;方舟编译器等极大…

Java基于Spring Boot框架的房屋租赁系统,附源码

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

Github工作流

GitHub 工作流 是一种专门为 GitHub 上的代码协作和版本控制而设计的工作流&#xff0c;它强调通过 **拉取请求&#xff08;Pull Request&#xff0c;PR&#xff09;** 来管理代码的合并和审查。GitHub 工作流通常涉及到使用 **分支** 来进行功能开发和修复&#xff0c;并通过 …