当前位置:网站首页>7-42 整型关键字的散列映射 (25 分)
7-42 整型关键字的散列映射 (25 分)
2022-08-02 02:56:00 【兄dei!】
原题:https://pintia.cn/problem-sets/15/problems/889
本题是考察对哈希表的理解,这里面哈希函数是用的除留余数法。【H(key)=key%p】除留余数法的关键在于找到那个余数p;题中已经给出。
规定处理哈希冲突的方法是线性探测法,就是简单地加一就行了。
#include<stdio.h>
#include<stdlib.h>
typedef struct h{
int *data;
int TableSize;
}*HashList;
HashList creat(int p)
{
int i;
HashList H=(HashList)malloc(sizeof(HashList));
H->TableSize=p;
H->data=(int*)malloc(sizeof(int)*H->TableSize);
for(i=0;i<p;i++)H->data[i]=0;//初始化0是空
return H;
}
int Findindex(HashList H,int key)//线性探测处理哈希冲突,找到合适的位置,并且返回它
{
int index=key%H->TableSize;
//找空位,如果在找的过程中碰到它本身,直接退出就行了。
while(H->data[index]!=0&&H->data[index]!=key)
{
index++;
if(index==H->TableSize)index=0;//如果满了就从头开始找
}
return index;
}
int insert(HashList H,int key)
{
int index=Findindex(H,key);//先找一个合适的位置
H->data[index]=key;
return index;
}
int main()
{
int i,N,P,key;
scanf("%d%d",&N,&P);
HashList H=creat(P);
for(i=0;i<N;i++)
{
scanf("%d",&key);
int x=insert(H,key);
if(i==0)
printf("%d",x);
else
printf(" %d",x);
}
return 0;
}
边栏推荐
猜你喜欢
随机推荐
ROS2自学笔记:launch文件完整编写流程
VPS8504C 微功率隔离电源隔离芯片 VPSC源特科技
Curriculum Vitae;CV
Webshell上传方式
Navicat cannot connect to database Mysql because of WiFi
MySQL8.0.26安装配置教程(windows 64位)
analog IC layout-Environmental noise
AcWing 1053. 修复DNA 题解(状态机DP、AC自动机)
2022.8.1-----leetcode.1374
Heuristic merge, DSU on Tree
PAT甲级打卡-1001-1004
isa指针使用详情
Common SQL interview questions: 50 classic examples
mysql8.0.28下载和安装详细教程,适配win11
【LeetCode】83.删除排序链表中的重复元素
PHP WebSehll backdoor script and detection tool
MySQL8.0.28安装教程
Flask之路由(app.route)详解
【LeetCode】206.反转链表
Go简单实现协程池