Salve ragazzi, stò cercando di creare una cosa particolare attraverso un array di strutture(nel mio caso un array di liste).

Praticamente io ho un array di interi (int A[100]), dopodichè attraverso una function, calcolo la posizione del puntatore ad una delle liste in questo modo:

int elem;
elem=rand() % 100;
position=elem % 100;

quindi, se l'elemento generato dalla function rand è 60, io avrò: 60 / 100 = 0.6 quindi, 0.
In definitiva, 60, dovrà essere il primo elemento di una lista, la quale viene puntata dalla posizione 0 dell'array A. Quindi avrò una cosa del tipo:

|*||_|_|_|_|_|_|
|
|
if elementi[position]==NULL
elementi[position]->value=elem;
elementi[position]->link=NULL;

in seguito, l'elemento di rand sarà 21, position sarà uguale a 10 e quindi:


|_||_|_|_|_|_|_|_|_|_|*|

|
|
if elementi[position]==NULL
elementi[position]->value=elem;
elementi[position]->link=NULL;

Però, potrebbe capitare che rand = 100 quindi, position è nuovamente uguale a 0 e abbiamo visto in precedenza che in 0 già c'era 60 quindi 100 deve andare nell'elemento successivo della lista con positione 0

Io ho pensato una cosa di questo tipo:
codice:
#include<iostream>
#include<stdlib.h>

#define DIM 100

using namespace std;


typedef struct nodo {
    int value;
    nodo *link;
} lista;


/* prototipi delle functions */
void hash(int A[DIM], lista *elementi);
bool searchElement(int A[DIM], int elemento, lista *elementi);

int main()
{

    lista *elementi=NULL;
    int elemento;
    int A[DIM];

    /* utilizzo il metodo hash */
    hash(A, elementi);
    cout<<"Qual'è l'elemento da cercare?"<<endl;
    cin>>elemento;
    searchElement(A, elemento, elementi);
}


void hash(lista *elementi){

    int i, position, elem;
    lista *new_element;

    for (i=0; i<DIM; i++){

        elem=rand() % 100;

        position=elem % DIM;

        if (elementi[position] == NULL){
            elementi[position]->value=elem;
            elementi[position]->link=NULL;
        } else
        {
            new_element=new lista;

            while (elementi[position] != NULL){
                new_element->value=elem;
                new_element->link=NULL;
                elementi[position]->link=new_element;
            }
        }
    }
}


bool searchElement(int elemento, lista *elementi){

    int i, position;
    bool exist=false;
    lista *temp;

    position=elemento % DIM;

    i=0;
    while (!exist && i<DIM){
        if(elementi[position] == NULL){
            exist=false;
        }else
        {
            temp=elementi[position];
            while (temp != NULL){
                if (temp->value == elemento){
                    exist=true;
                }else
                {
                    temp=temp->link;
                }

            }
        }
    }

    return exist;
}
Praticamente non saprei come fare puntare la posizione dell'array A alla lista di posizione , position(es. 10).

Grazie anticipatamente.