Exemplo n.º 1
0
void set_ht( HashTable * hashtable, Node * node){

    int cell=0;
    
    HeadNode * headNode;
    
    
    cell=hashFunc(hashtable,node->record->phone);
    
    
    if((hashtable->table[cell])== NULL) {
         
        headNode=(HeadNode *)malloc(sizeof(HeadNode));
        initHeadNode(headNode);
        hashtable->table[cell]=headNode;
        insert_Tolist(headNode,node);
        
    }
    
    else
    {
        
        insert_Tolist(hashtable->table[cell],node);
        
    }
       
        
    
}
Exemplo n.º 2
0
int main (int argc, char *argv[]) {
    
    /*
     -------------------------------------------------
     Declaração das variáveis
     -------------------------------------------------

     Parâmetros:
    */
    
    int n = 0;          /* Número de pontos */
	int m = 1;          /* Número de vezes para rodar */
	int s = 0;          /* Seed do srand()  */
    int D = 0;          /* Número de dimensões do hipercubo/da hiperesfera */
	int v = 0;          /* 1 para imprimir os pontos, 2 para os pontos e os resultados parciais */
    int c = 0;          /* Se o usuário vai escrever os pontos ele mesmo */
    float d = 0;        /* A distância a ser testada */
    
    char *parametro;    /* String para percorrer os parâmetros no argv[] */
    
    /*
     Contadores:
    */
    
    int i = 0;
    
    /*
     Outras variáveis:
    */
    
    node pontos = initHeadNode();       /* Ponteiro para a cabeça da futura lista de pontos */
    
    
    
    
    /*
     Inicializações
    */
    
    pontos->point = NULL;
    pontos->prox = NULL;
    
    
    /*
     Leitura de Parâmetros
    */
    
    for (i = 1; i < argc; i ++) { /* Percorre todos os parâmetros passados */
        parametro = argv[i];
        
        if (parametro[1] == 'N') { /* Atribui o valor do parâmetro à variável adequada */
            n = atoi(&parametro[2]);
        }
        else if (parametro[1] == 'M') {
            m = atoi(&parametro[2]);
        }
        else if (parametro[1] == 's') {
            s = atoi(&parametro[2]);
        }
        else if (parametro[1] == 'D') {
            D = atoi(&parametro[2]);
        }
        else if (parametro[1] == 'v') {
            v = 1;
        }
        else if (parametro[1] == 'V') {
            v = 2;
        }
        else if (parametro[1] == 'C') {
            c = 1;
        }
        else if (parametro[1] == 'd') {
            d = atof(&parametro[2]);
        }
    }
    
    /* Atualiza a seed do rand() */
    srand(s);
    
    /* Passa a quantidade de dimensões para a biblioteca */
    initDim(D);
    
    /*
     Inicialização dos pontos. Se o usuário passou o parâmetro -C, vamos pegar os dados da stdin.
     Caso contrário, vamos gerar os pontos aleatoriamente.
    */
    
    
    if (c == 1) {
        float x = 0;            /* Guardar o input do usuário */
        node nodulo = pontos;  /* Percorrer e criar a lista de pontos */
        
        i = D;                  /* Inicializa i de tal forma que a primeira iteração vá criar um nódulo novo */
        n = 0;                  /* Para contar o número de pontos que o usuário vai entrar */
        
        
        printf ("Por favor, digite os pontos desejados.\nQuando terminar, pressione Ctrl+D.\n");
        
        while (scanf("%f", &x) == 1) {
            if (i == D) {               /* O usuário vai começar um ponto novo */
                node aux = nodulo;     /* Inicializa o novo ponto */
                nodulo = initNode();
                aux->prox = nodulo;
                
                i = 0;                  /* Reinicia o contador, soma 1 no número de pontos */
                n ++;
            }
            
            nodulo->point[i] = x;       /* Insere o valor na coordenada */
            i++;
        }
        
        printf("Pontos gerados.\n");
    }
    else {
        node nodulo = pontos;           /* Percorrer e criar a lista de pontos */
        for (i = 0; i < n; i ++) {      /* Precisa criar n pontos */
            nodulo->prox = randNode();  /* Inicializa um novo ponto com valores aleatórios */
            nodulo = nodulo->prox;
        }
    }
    
    
    /*
     Impressão dos pontos (para depuração, principalmente)
    */
    
    
    if (v > 0) {        /* Se for 1 ou 2 (v ou V estiver presente) é necessário imprimir os pontos */
        node nodulo = pontos->prox;    /* Percorrer a lista de pontos */
        
        while (nodulo != NULL) {        /* Enquanto a lista não acabar */
            printf("(");
            for (i = 0; i < D; i++) {   /* Percorre as coordenadas do ponto */
                printf("%f", nodulo->point[i]);
                if (i < D-1) printf (", ");
            }
            printf(")\n");
            nodulo = nodulo->prox;      /* Vai para o próximo ponto */
        }
    }
    
    initGrafo(pontos, n);
    
    
    if (d > 0) {       /* Se o usuário passou a distância, assume-se que ele quer saber se o grafo é conexo ou não */
        int result = eSuficiente(d, pontos);
        
        if (result == YES) {
            printf("O grafo é conexo.\n");
        }
        else {
            printf("O grafo não é conexo.\n");
        }
    }
    else {              /* Caso a distância não tenha sido fornecida, assume-se que o usuário quer calcular o limiar */
        
        quickSortDistancias(n);
        
    }
    
    
    
    
    return 0;
}