分别写出在散列表中插入和删除关键字为K的一个记录的算法,设散列函数为H,解决冲突的方法为链地址法。

devtools/2024/11/17 13:43:33/
#include<stdbool.h>
//定义链表结构
typedef struct LNode
{int data;struct LNode* next;
}LNode,*LinkList;
//假设散列表的大小为100
#define TABLE_SIZE 100
LinkList HT[TABLE_SIZE];//散列函数
int hash(int data)
{return data % TABLE_SIZE;//所有data都会存储在0-TABLE_SIZE-1的位置里面
}void initialize_hash_table()
{//给每个链表申请空间for (int i = 0; i < TABLE_SIZE; i++){HT[i] = (LinkList)malloc(sizeof(LNode));if (HT[i] == NULL){perror("error");exit(1);}HT[i]->next = NULL;}
}//插入
bool insert(int data)
{int ant = hash(data);//拿到哈希地址LinkList p = HT[ant];//p指向这个哈希地址while (p->next)//判断HT[ant]后的data有没有跟当前的相等{if (p->next->data == data){return false;}p = p->next;}//没相等的data就插入新节点LinkList s = (LinkList)malloc(sizeof(LNode));if (s == NULL){perror("error:");return false;}s->data = data;s->next = p->next;p->next = s;return true;
}//删除函数
bool delete_key(int data)
{int ant = hash(data);LinkList p = HT[ant];while (p->next){if (p->next->data == data){LinkList s = p->next;p->next = s->next;free(s);return true;}p = p->next;}return false;
}
int main()
{//初始化链表initialize_hash_table();insert(1);insert(10);insert(20);insert(30);insert(10);//插入失败的for (int i = 0; i < 100; i++) {LinkList p = HT[i]->next;if (p != NULL) {printf("Slot %d: %d\n", i, p->data);}}printf("\n");delete_key(10);delete_key(1);for (int i = 0; i < TABLE_SIZE; i++) {LinkList p = HT[i]->next;if (p != NULL) {printf("Slot %d: %d\n", i, p->data);}}for (int i = 0; i < TABLE_SIZE; i++){free(HT[i]);}return 0;
}


http://www.ppmy.cn/devtools/134707.html

相关文章

创建游戏云存档功能的完整指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

ODC 如何精确呈现SQL耗时 | OceanBase 开发者工具解析

前言 在程序员或DBA的日常工作中&#xff0c;编写并执行SQL语句如同日常饮食中的一餐一饭&#xff0c;再寻常不过。然而&#xff0c;在使用命令行或黑屏客户端处理SQL时&#xff0c;常会遇到编写难、错误排查缓慢以及查询结果可读性不佳等难题&#xff0c;因此&#xff0c;图形…

力扣 LeetCode 347. 前K个高频元素(Day5:栈与队列)

解题思路&#xff1a; 小根堆统计前K个高频元素 注意&#xff1a; PriorityQueue中需要自定义排序规则 class Solution {public int[] topKFrequent(int[] nums, int k) {PriorityQueue<int[]> pq new PriorityQueue<>((x,y)->x[1]-y[1]);Map<Integer,Int…

【366】基于springboot的高校物品捐赠管理系统

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装高校物品捐赠管理系统软件来发挥其高效地信息处理的作用&am…

wpf的C1FlexGrid可见表格合并计算操作

计算动态加载行后的部分字段的计算求和操作 表格上添加事件触发ItemsSourceChanged属性&#xff0c;触发事件 <c1:C1FlexGrid Name"CfgSaleOrderReviewItem" Style"{StaticResource Green}" ItemsSource"{Binding SaleOrderList,ModeTwoWay}"…

Ubuntu问题 -- 允许ssh使用root用户登陆

目的 新重装的系统, 普通用户可以使用ssh登陆服务器, 但是root不能使用ssh登陆 方法 vim 编辑ssh配置文件 sudo vim /etc/ssh/sshd_config找到 PermitRootLogin 这一行, 把后面值改成 yes 重启ssh sudo service sshd restart然后使用root账号登陆即可

动态规划子数组系列(二) 环形子数组的最大和

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public int maxSubarraySumCircular(int[] nums) {int sum 0;int n nums.length;int[] f new int[n1];int[] g new int[n1];int ret 0, fmax -0x3f3f3f3f, gmin Integer.MAX_VALUE;for(int i 1; i < n; i)…

STM32 | 超声波避障小车

超声波避障小车 一、项目背题 由于超声波测距是一种非接触检测技术&#xff0c;不受光线、被测对象颜色等的影响&#xff0c;较其它仪器更卫生&#xff0c;更耐潮湿、粉尘、高温、腐蚀气体等恶劣环境&#xff0c;具有少维护、不污染、高可靠、长寿命等特点。因此可广泛应用于…