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

embedded/2024/11/26 3:13:25/
#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/embedded/140532.html

相关文章

微服务系列概览

分布式和微服务的区别是什么&#xff1f; 分布式是把一个集中式系统拆分成多个系统&#xff0c;每一个系统单独对外提供部分功能&#xff0c;整个分布式系统整体对外提供一整套服务。对于访问分布式系统的用户来说&#xff0c;感知上就像访问一台计算机一样。 而分布式架构的…

Elasticsearch面试内容整理-安全与权限管理

在 Elasticsearch 中,安全与权限管理至关重要,特别是当系统处理敏感数据时。Elasticsearch 提供了一套全面的安全机制来确保数据的机密性、完整性和可用性。以下是 Elasticsearch 安全与权限管理的详细介绍。 安全组件概述 Elasticsearch 的安全功能由 Elastic Stack 提供的一…

C#开发最快的浏览器,打造极速浏览体验

在现代软件开发中&#xff0c;浏览器已成为我们日常生活中不可或缺的一部分。对于C#开发者来说&#xff0c;使用C#开发一个快速且功能齐全的浏览器是一个挑战&#xff0c;但也是一个展示技术实力的机会。本文将介绍如何使用C#和CefSharp库开发一个高性能的浏览器&#xff0c;以…

高可用系统建设指南

高可用系统建设指南 1. 容错设计 1.1 故障隔离 1.1.1 隔离层级与实战案例 a) 进程隔离 独立部署的服务进程进程级别的资源限制JVM参数优化示例&#xff1a; # JVM内存与GC配置 JAVA_OPTS"-Xms4g -Xmx4g -XX:UseG1GC -XX:MaxGCPauseMillis200 -XX:HeapDumpOnOutOfMem…

修复HIve表乱码问题

修改数据库编码 # 修改已存在的hive元数据库&#xff0c;字符编码格式为utf8mb4 mysql> alter database hive character set utf8mb4; # 进入hive元数据库 mysql> use hive;# 查看元数据库字符编码格式 mysql> show variables like character_set_database; 修改…

单片机电路基本知识

单片机电路基本知识 MCU(C51) 概念&#xff1a;应用实例家用电子&#xff0c;汽车电子&#xff0c;嵌入式系统&#xff0c;低成本&#xff0c;低功耗&#xff0c;小型化&#xff0c;通常使用c语言或者汇编语言&#xff0c;用于家用电器控制&#xff0c;智能家居&#xff0c;汽…

Windows RDP连接Ubuntu桌面

Windows RDP连接Ubuntu桌面 文章目录 Windows RDP连接Ubuntu桌面1. 安装 RDP 服务器2. 配置 Xfce4 桌面3. 配置 xrdp4. 启动 xrdp 服务&#xff1a;5. 允许通过防火墙&#xff08;可选&#xff09;6. 连接到RDP服务器7. 参考博客 1. 安装 RDP 服务器 在Ubuntu系统上&#xff0…

OpenAI震撼发布:桌面版ChatGPT,Windows macOS双平台AI编程体验!

【雪球导读】 「OpenAI推出ChatGPT桌面端」 OpenAI重磅推出ChatGPT桌面端&#xff0c;全面支持Windows和macOS系统&#xff01;这款新工具为用户在日常生活和工作中提供了前所未有的无缝交互体验。对于那些依赖桌面端进行开发工作的专业人士来说&#xff0c;这一更新带来了令人…