哈希算法Hush
总结:
总结:
--1.赋值函数:memset(hash,0,sizeof(hash));
---------------- 需要调用头指针#include <string.h>
--2.假无限数组: i=data%p;
数据结构实验之查找七:线性之哈希表
改进前
# include<stdio.h> # include<string.h> # include<stdlib.h> int main() { int n,p; while(scanf("%d %d",&n,&p)!=EOF) { int hash[1500][2]= {{0} }; int i,j; int data[n+1]; int t=0; for(i=0; i<n; i++) { scanf("%d",&data[i]); t=data[i]%p; for(j=t;j<p;) { if(hash[j][1]==data[i]) { printf("%d",j); break; } else if(hash[j][0]==0) { hash[j][1]=data[i]; hash[j][0]++; printf("%d",j); break; } j++; j=j%p; } if(i!=n-1) printf(" "); } printf("\n"); } return 0; }
改进后:
因为不保存;
HASH函数没必要开成二维数组,data没必要开成数组
# include<stdio.h> # include<string.h> # include<stdlib.h> int main() { int n,p; while(scanf("%d %d",&n,&p)!=EOF) { int hash[1500]; memset(hash,0,sizeof(hash)); int i,j; int data; int t; for(i=0; i<n; i++) { scanf("%d",&data); t=data%p; for(j=t; j<p;) { if(hash[j]==data) { printf("%d",j); break; } else if(hash[j]==0) { hash[j]=data; printf("%d",j); break; } j++; j=j%p; } if(i!=n-1) printf(" "); } printf("\n"); } return 0; }
E - 数据结构实验之查找五:平方之哈希表
改进前
# include<stdio.h> # include<string.h> # include<stdlib.h> int main() { int n,p; while(scanf("%d %d",&n,&p)!=EOF) { int a[1500]= {0 }; int i,j; int data[n+1]; int t=0; int k; int o; for(i=0; i<n; i++) { scanf("%d",&data[i]); t=data[i]%p; for(j=t,k=1,o=1; j<p;) { if(j>=0) { if(a[j]==0) { a[j]=data[i]; printf("%d",j); break; } } j=t+o*k*k; j=j%p; if(o==1) o=-1; else { o=1; k++; } } if(i!=n-1) printf(" "); } printf("\n"); } return 0; }
改进前后
# include<stdio.h> # include<string.h> # include<stdlib.h> int main() { int n,p; while(scanf("%d %d",&n,&p)!=EOF) { int hash[1500]; memset(hash,0,sizeof(hash)); int i,j; int data; int t=0; int k; int o; for(i=0; i<n; i++) { scanf("%d",&data); t=data%p; for(j=t,k=1,o=1; j<p;) { if(j>=0) { if(hash[j]==0) { hash[j]=data; printf("%d",j); break; } } j=t+o*k*k; j=j%p; if(o==1) o=-1; else { o=1; k++; } } if(i!=n-1) printf(" "); } printf("\n"); } return 0; }
TimesIsMoney
转自https://blog.csdn.net/zb756999355/article/details/77097476
不明白为什么我错了,有知道的兄弟,可以留言
转的
#include<bits/stdc++.h> using namespace std; int main() { int n; while(cin >> n) { char a[10086]; map<string, long long int>Map; while(n --) { memset(a, 0, sizeof(a)); scanf("%s", a); Map[a] ++; } int T; cin >> T; char b[10086]; while(T --) { memset(b, 0, sizeof(b)); scanf("%s", b); printf("%d\n", Map[b]); } } }
我的(错了)
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int n; scanf("%d",&n); int hash[10001]; memset(hash,0,sizeof(hash)); int i; int data; for(i=0;i<n;i++) { scanf("%d",&data); hash[data]++;; } int m; scanf("%d",&m); int inquire; for(i=0;i<n;i++) { scanf("%d",&inquire); printf("%d\n",hash[inquire]); } return 0; }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/15196145.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步