Ir para conteúdo
Fórum Script Brasil

R. Bighi

Membros
  • Total de itens

    7
  • Registro em

  • Última visita

Sobre R. Bighi

R. Bighi's Achievements

0

Reputação

  1. Galera, o problema já foi resolvido. Eu estava usando a mesma função para inicializar todos os vetores do programa, inclusive as tabelas, e por conta disso estava criando tabelas extremamente grandes. Criei uma nova função somente para inicializar as tabelas e deu td certo. Obrigado pela atenção e pelas dicas!
  2. Galera, estou com uma dúvida no meu programa. É o seguinte: Tenho alguns dados em um arquivo texto; o programa lê os 3 valores da primeira linha e associa à 3 variáveis e depois armazena os valores da 2a linha em um vetor para serem inseridos posteriormente em uma tabela hash. Dentre esses valores associados às variáveis está a variavel "t", que é o tamanho da tabela a ser criada. Ou seja, o programa le o tamanho da tabela no arquivo e depois cria uma tabela do tamanho t (isso serve pros outros vetores tambem). Inicialmente, antes de fzer a leitura do arquivo, tinha usado um define para o tamanho da tabela, mas agora q modifiquei o programa, estou tendo problemas ma hora de executar, e creio q seja por conta de alocação de memória, na qual n estou sabendo fzer. Alguém pode ajudar?
  3. Então, o uso da árvore é para o seguinte: Suponha que eu tenha uma tabela hash com alguns valores inseridos. O método que estou tentando implementar vai utilizar a árvore pra encontrar uma possível alocação pra um novo valor nessa tabela, de forma que a busca nessa tabela seja a mais eficiente possível. Ainda não consegui completar o raciocinio, e por conta disso n tenho mt coisa da arvore pronta. Eu fiz as funções para a árvore e, meu problema tá sendo no main. Pensei em usar um while(*p->numero != 0) para continuar completando a árvore até encontrar uma posição da tabela que esteja vaga, MAS eu não consigo pensar em como percorrer cada nó da árvore na ordem certa pra usar a função de inserir. Entendeu? As funções que fiz são essas: #include <stdio.h> #include <stdlib.h> typedef struct No{ int numero; struct No *pEsquerda; //ponteiro apontando para o filho esquerdo struct No *pDireita; //ponteiro apontando para o filho direito struct No *p; //ponteiro para percorrer a arvore }No; void criarArvore(No **pRaiz){ *pRaiz = NULL; //inicializa a arvore } void inserir (No **pRaiz) { if (*p->pEsquerda == NULL) // Se o lado esquerdo da árvore estiver vazio, inserir { *p->Esqueda = hash(i) + inc(i); } else { if (*p->pDireita == NULL) // Se o lado esquerdo estiver ocupado, adicionar no direito. { *p->pDireita = hash(i) + inc(tabela[i]); } } } [/codebox] Queria mesmo era uma idéia de como fzer... Realmente empaquei em como percorrer isso aí... Obrigado desde já!
  4. Ae galera, estou tentando implementar um método que utiliza uma árvore binária (quase) completa para realizar suas operações. No caso, a inserção sempre vai da esquerda para a direita, e só o último nível é que pode ser incompleto, tendo somente os elementos mais à esquerda. Eu entendi o conceito, mas não consigo construir um algoritmo de inserção para essa árvore. Imagino que, a cada inserção de um nó, tenho que mover o ponteiro principal de volta à raiz, mas não estou conseguindo fazer funcionar porque não sei como fazer ele identificar onde deve inserir os próximos elementos para que sejam inseridos na ordem certa. Alguém pode me dar uma idéia??
  5. R. Bighi

    Dúvida em problema

    Cara, muito obrigado pela ajuda! Consertei os erros e fui utilizando de vários printf pelo programa pra ver até onde está rodando perfeitamente. Meu grande (e creio que ultimo) problema está sendo no último while que, por algum motivo, ele entra e não sai nunca (a variavel posicao não está sendo incrementada como deveria...). Alguém sabe resolver? while (tabela[posicao] != NULL) { posicao += incremento[posicao]; if (posicao > N) posicao = posicao % N; printf("posicao2: %d\n", posicao); } O que ele faz aí (ou a idéia, no caso) é que, enquanto a posicao atual da tabela não estiver vazia, ele soma um incremento à essa posição e vai tentando até achar uma vazia.
  6. R. Bighi

    Dúvida em problema

    Cara, muito obrigado pelas informações! Eu modifiquei algumas coisas no programa, entre essas modificações, criei uma função pra inicializar a tabela, retornando todas as posições dela como vazias (NULL). Agora tá compilando direitinho, mas ainda tá dando algum erro que não consigo descobrir qual... Tentei debugar, mas ainda não resolvi o problema. Alguém dá uma luz? #include <stdio.h> #include <stdlib.h> #define N 11 int *criar() { return NULL; } int hash(int valor) { return valor % N; } int doubleHash(int valor) { return valor / N; } int main (void) { int *tabela[N], incremento[N], valor[N], posicao=0; int contador = 0; int i; for (i = 0; i < N; i++) tabela[i] = criar(); // Inicializa a Tabela valor[0] = 27; valor[1] = 18; valor[2] = 29; valor[3] = 28; valor[4] = 39; valor[5] = 13; valor[6] = 16; while (contador<N) { posicao = hash(valor[contador]); if (tabela[posicao] == NULL) { *tabela[posicao] = valor[contador]; contador++; } else { incremento[contador] = doubleHash(valor[contador]); while (*tabela[posicao] =! NULL) { posicao = ((posicao + incremento[posicao]) % N); } *tabela[posicao] = valor[contador]; contador++; } contador++; } }
  7. Ae galera, estou fazendo um trabalho de faculdade e ando meio enferrujado na linguagem. O problema se resume a ler um vetor com alguns valores e armazená-los numa tabela usando Hash, com tratamento de colisão por Quociente linear, mas creio q minha dúvida seja mais sobre C em si. Aí vai o que fiz até agora, mas não consigo compilar por conta de um problema no 1o if, onde verifico se a posição na tabela está vazia (ou pelo menos tento). #include <stdio.h> #include <stdlib.h> #define N 11 int hash(int valor) { return valor % N; } int doubleHash(int incremento) { return incremento / N; } int main (void) { int tabela[N], incremento[N], valor[N], posicao=0; int contador = 0; int i= 0; valor[0] = 27; valor[1] = 18; valor[2] = 29; valor[3] = 28; valor[4] = 39; valor[5] = 13; valor[6] = 16; while (contador<N) { posicao = hash(valor[i]); if (tabela[posicao] == NULL) { tabela[posicao] = valor[contador]; contador++; } else { incremento[posicao] = doubleHash(posicao); while (tabela[posicao] =! NULL) { posicao = ((posicao + incremento[posicao]) % N); } tabela[posicao] = valor[contador]; contador++; } i++; } } O programa ainda tá em fase inicial e ainda to tentando fzer o básico funcionar pra continuar progredindo, mas realmente não entendi o porque do erro. Se alguém puder dar uma luz, agradeço muito! Vlw gente!
×
×
  • Criar Novo...