ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

acwing840 模拟散列表 2021/11/27

2021-11-27 22:34:59  阅读:124  来源: 互联网

标签:11 单链 return idx int ne 负数 27 acwing840


#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;
int const n=100003;

int h[n],e[n],ne[n],idx;
h[]是哈希函数的一维数组//e[]是链表中存的值//ne[]是指针存的指向的地址//idx是当前指针

void insert(int x)
{
    int k = (x % n + n) % n; 对负数的处理,k是哈希值

    e[idx] = x;
    ne[idx] = h[k];
    h[k] = idx ++;                          //如果不同单链表的idx都是从0开始单独计数,
                                            //那么不同链表之间可能会产生冲突
                                            //比如如果第0个节点被分配给了第一个单链表,
                                            //那么所有单链表就只能从下一个节点开始分配,
                                            //所以所有单链表需要共用一个idx。
                                            //就是单链表的插入操作 开放寻址法
}
bool find(int x)
{
    int k= (x % n + n) % n;  ///为了让负数在整数有映射,负数的取模还是负数,加上maxn后为正,再%即可
    for(int i = h[k]; i != -1; i = ne[i])//
        if(e[i] == x)
            return true;


return false;
}
int main(void)
{
   cin.tie(0);//减少时间 提高效率
   int n;  cin>>n;
   
   memset(h, -1, sizeof(h));  ///所有槽都清空,对应的是单链表的头(head) 指针为-1表示清空
   
   while(n--) 
   {
       char op[2]; int x;
       scanf("%s%d", op, &x);
       
       if(op[0] == 'I') insert(x);
       else 
       {

           if(find(x)) cout<<"Yes"<<endl;
           else cout<<"No"<<endl;
       }
   }
   
    return 0;  
    
}


 

标签:11,单链,return,idx,int,ne,负数,27,acwing840
来源: https://blog.csdn.net/weixin_51658930/article/details/121584831

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有