tabela hash  XML
Índice dos Fóruns » Outras Linguagens
Autor Mensagem
ADRIANA NUNES
Entusiasta Java
[Avatar]

Membro desde: 03/01/2009 13:41:28
Mensagens: 21
Offline

olá pessoal , pois tenho que fazer um trabalho em c++ com a tabela hash seria o seguinte inserir nomes e telefones de uma pessoa, depois remover o nome e o telefone e depois consultar o telefone .alguém poderia me ajudar por favor. o que consegui fazer foi isso : eu quero agora o telefone como faço para implementar?:
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define TAMTAB 37



typedef char string[30];


typedef struct{

string tab[TAMTAB];

int ocup;

}tabela;


void pausa(){

fflush(stdin);

getchar();

}


int hash(char *nom){

int soma, i;

soma = 0;

for(i = 0; i < strlen(nom); i++)

soma += (i+1)*nom[i];

soma = soma%TAMTAB;

if(soma == 0)

return 1;

return soma;

}


int hash_insere(tabela *t, char *nome, int h){

if(strcmp(t->tab[h],"\0") == 0 || strcmp(t->tab[h], "*") == 0){

strcpy(t->tab[h], nome);

t->ocup++;

printf("\n\tO nome foi inserido na posicao %d\n", h);

return 0;

}

return 1;

}


int hash_procura(tabela *t, char *nome, int h){

int i = 0;

while(strcmp(t->tab[(h*++i*i)%TAMTAB],"\0") != 0 && strcmp(t->tab[(h*i*i)%TAMTAB], nome) != 0); //Faz ateh achar um espaco vazio ou achar o nome.

if(strcmp(t->tab[(h*i*i)%TAMTAB],"\0") == 0){

return -1;//Se nao achou, devolve -1

}

else{

printf("\n\tO nome foi encontrado na posição %d\n", h*i*i%TAMTAB);

return (h*i*i)%TAMTAB; //se achou, em que posicao achou?

}

}


void hash_remover(tabela *t, char *nome){

int a;

a = hash_procura(t, nome, hash(nome));

if(a < 0)

printf("\n\tO nome %s procurado nao consta na tabela.\n", nome);

else{

strcpy(t->tab[a], "*");

t->ocup--;

printf("\n\tO nome foi removido: %s\n", nome);

}

}



void menu(){


printf("\t0. Sair do programa\n");

printf("\t1. Inserir Nomes;\n");

printf("\t2. Procurar Nomes;\n");

printf("\t3. Remover Nomes;\n");




printf("\n\nSua escolha: ");

}


void escolha(tabela *t){

string nome;

int i, h, opc;

scanf("%d", &opc);

switch(opc){

case 0:

break;

case 1:

printf("\nDigite os nomes a serem colocados na tabela.\n");

printf("Termine a sequencia com \"*\":\n");

do{

scanf("%s", nome);

if(strcmp(nome, "*") != 0){

i = 0;

h = hash(nome);

while(hash_insere(t, nome, ((++i*h*i)%TAMTAB)));

//printf("i = %d\n", i); //imprimir o numero de tentativas

}

}while(strcmp(nome, "*")); //leitura

break;

case 2:

printf("\nDigite os nomes a serem consultados.\n");

printf("Termine a sequencia com \"*\"\n");

do{

scanf("%s", nome);

if(strcmp(nome, "*") != 0){

h = hash(nome);

i = hash_procura(t, nome,h);

if(i < 0){

printf("\n\tO nome %s nao foi encontrado\n");

}

else{

printf("\n\t%s esta na tabela!\n");

}

}

}while(strcmp(nome, "*"));//procura

break;

case 3:

printf("\nDigite os nomes a serem removidos.\n");

printf("Termine a sequencia com \"*\":\n");

do{

scanf("%s", nome);

if(strcmp(nome, "*") != 0){

hash_remover(t, nome);

}

}while(strcmp(nome, "*"));//remocao

break;







default:

printf("Opcao invalida. Por favor, digite uma opcao valida.\n");

break;

}

if(opc != 0){

menu();

escolha(t);

}

}

int main(){

tabela t;

int i;

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

strcpy(t.tab[i],"\0");

}

t.ocup = 0;//Ateh aqui, iniciar tabela.

menu();

escolha(&t);

printf("Saindo do programa....\n");

}

Obrigada a todos. Curso de graduação 5° período na área de desenvolvimento de software
Cefet Campos -RJ
a Melhor vingança é se dar o Perdão..
 
Índice dos Fóruns » Outras Linguagens
Ir para:   
Powered by JForum 2.1.8 © JForum Team