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

模拟哈希表

#include<iostream>
#include<cstring>using namespace std;
const int N=100010;
int h[N],e[N],ne[N];
int idx=0;void insert(int x)
{int t=(x%N+N)%N;//模拟链表插入e[idx]=x,ne[idx]=h[t],h[t]=idx++;
}bool find(int x)
{int t=(x%N+N)%N;t=h[t];while(t!=-1)if(e[t]==x)return true;elset=ne[t];return false;
}int main()
{int n;memset(h,-1,sizeof h);scanf("%d",&n);while(n--){char op[2];int x;scanf("%s%d",op,&x);if(op[0]=='I')insert(x);else{if(find(x))puts("Yes");elseputs("No");}}return 0;
}

该方法是对于每个哈希冲突的位置,用一个模拟链表来存储,然后每次查找都是从这个模拟链表的头部开始依次查找,直到找到或者到了链表尾部才停止。

模拟链表的方式是用e[i]表示i下标存放的实际的数,ne[i]表示i下标所指向的下一位的下标。

因此,对于下标i,j,实际上是e[i]->e[j]。即利用下标获得指向的数,也利用下标得知本位制存放的数。


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

相关文章:

  • 【JAVA毕业设计】基于Vue和SpringBoot的宠物咖啡馆平台
  • Linux软件包管理与Vim编辑器使用指南
  • 【数据库】深入解析慢 SQL 的识别与优化策略
  • SQL50题
  • Redis增删改查、复杂查询案例分析
  • 浅谈C#之内存管理
  • LVGL第一篇-了解lvgl显示原理以及使用C++移植
  • Zookeeper
  • BERT训练环节(代码实现)
  • Seata分布式事务实践
  • Allegro视频去除走线的小方块
  • [linux][证书]证书导出公钥
  • 关于Python升级以后脚本不能运行的问题
  • LCR 028
  • 字符串哈希
  • 2-102基于matlab的蒙特卡洛仿真
  • 考研数据结构——C语言实现小顶堆
  • SpringBoot基础知识
  • string 的介绍及使用
  • C++语言桌面应用开发GTK3 Gtkmm3 Glade
  • 在Java中如何利用ClassLoader动态加密、解密Class文件
  • 面经宝典【1】-拼多多
  • 插入、更新与删除MySQL记录
  • Python 入门教程(7)面向对象 | 7.5、继承
  • Docker部署服务:快速入门指南
  • opencv学习笔记(一)