E - Encuentra las estructuras de datos experimentales siete: la tabla de dispersión lineal

Descripción

De acuerdo con un conjunto dado de palabras clave y un número entero número primo p, definida por I estancia excepto función hash H (Key) = Key% p, la cartografía de palabras clave para una tabla hash de longitud p, el método de detección de resolución de conflictos lineal . palabras clave duplicadas en la misma ubicación en la tabla hash.
entrada

Introduzca múltiples conjuntos de datos, cada conjunto de datos de entrada a dos primeros actos de números enteros positivos N (N <= 1,500) y P (p> = mínimo número primo N), N es el número total de palabras clave, p es la longitud de la tabla hash, la segunda línea da N enteros positivos entre las palabras clave, los espacios de intervalo digitales.
salida

posición de salida de cada tabla hash de palabras clave, un intervalo de espacio. Tenga en cuenta que la última detrás de dígitos sin espacios.
muestra

Entrada

5 5
21 21 21 21 21
4 5
24 15 61 88
4 5
24 39 61 15
5 5
24 39 61 15 39
Salida

1 1 1 1 1
4 0 1 3
4 0 1 2
4 0 1 2 0

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int hax[1600],v[1600],n,m,i,len,j,k;
    while(~scanf("%d %d",&n,&m))
    {
        len = 0;
        memset(hax,-1,sizeof(hax));
        for(i=0;i<n;i++)
        {
            scanf("%d",&k);
            int id = k% m;
            if(hax[id] == -1)
            {
                hax[id] = k;
                v[len++] = id;
            }
             else
             {
                 for(j=0;j<m;j++)
                 {
                     if(hax[(k+j)%m] == k)//重复关键字放在hash表中的同一位置。
                     {
                         v[len++] = (k+j)%m;
                         break;
                     }
                     else
                     {
                         if(hax[(k+j)%m] == -1)
                         {
                             hax[(k+j)%m] = k;
                             v[len++] = (k+j)%m;
                             break;
                         }
                     }
                 }
             }
        }
        for(i=0;i<len;i++)
        {
            if(i == len-1)
                printf("%d\n",v[i]);
            else
                printf("%d ",v[i]);
        }

    }
    return 0;
}

Publicados 176 artículos originales · ganado elogios 7 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/Fusheng_Yizhao/article/details/104924892
Recomendado
Clasificación