哈希算法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;
}

posted @ 2021-08-28 10:29  kingwzun  阅读(102)  评论(0编辑  收藏  举报