总结:
总结:
--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;
}