Advertisement
Guest User

Untitled

a guest
Apr 21st, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "patricia.h"
  4. #include <sys/time.h>
  5. #include <string.h>
  6.  
  7. // nao precisa, ja esta definido em patricia.h
  8. //#define D 50
  9.  
  10. //OBSERVACAO PARA LEMBRAR, MUDEI O K PARA UM VETOR...
  11.  
  12. short EExterno(TipoArvore p)
  13. { /* Verifica se p^ e nodo externo */
  14. return (p->nt == Externo);
  15. }
  16.  
  17. TipoArvore CriaNoInt(unsigned int i, TipoArvore *Esq, TipoArvore *Dir,unsigned char Letra)
  18. { TipoArvore p;
  19. p = (TipoArvore)malloc(sizeof(TipoPatNo));
  20. p->nt = Interno;
  21. p->NO.NInterno.Esq = *Esq;
  22. p->NO.NInterno.Dir = *Dir;
  23. p->NO.NInterno.Pos = (char)i;
  24. printf("\nO VALOR DE I AQUI É: %d\n", p->NO.NInterno.Pos);
  25. p->NO.NInterno.Letra = Letra;
  26. return p;
  27. }
  28. // PASSOU POR TODA FUNÇÃO
  29. TipoArvore CriaNoExt(TipoChave *k){
  30. TipoArvore p;
  31. int i = 0;
  32. p = (TipoArvore)malloc(sizeof(TipoPatNo));
  33. p->nt = Externo;
  34. while(*(k+i) != '\0') {
  35. p->NO.Chave[i] = *(k+i);
  36. i++;
  37. }
  38. return p;
  39. }
  40. //==============================
  41.  
  42. ///MUDAR ESSA PESQUISA DISNEY AEE
  43.  
  44. /*
  45. void Pesquisa(TipoChave k, TipoArvore t)
  46. { if (EExterno(t))
  47. { if (k == t->NO.Chave)
  48. printf("Elemento encontrado\n");
  49. else printf("Elemento nao encontrado\n");
  50. return;
  51. }
  52. if (Bit(t->NO.NInterno.Pos, k) == 0) //TEM Q TIRAR ESSE BIT, MAS TENHO Q VER COMO MUDAR A COMPARACAO DE INDEX
  53. Pesquisa(k, t->NO.NInterno.Esq);
  54. else Pesquisa(k, t->NO.NInterno.Dir);
  55. }
  56. */
  57.  
  58. TipoArvore InsereEntre(TipoChave *k, TipoArvore *t,unsigned int i,unsigned char Letra) {
  59. TipoArvore p;
  60. if (EExterno(*t)) {
  61. printf("\nCHEGOU AQUI...\n");
  62. p = CriaNoExt(k);
  63. if ( (*t)->NO.Chave[i] != Letra){//FIXED eu acho
  64. printf("\nDISNEY CHANELL\n");
  65. return (CriaNoInt(i, t, &p, Letra));} // OLHAR AMANHA
  66. else return (CriaNoInt(i, &p, t, Letra));
  67. }
  68. else {
  69. printf("\nTA CHEGANDO NO INSERE ISSO AQUI: %c\n", (*t)->NO.NInterno.Letra);
  70. if ((*(k+((int)((*t)->NO.NInterno.Pos))) == (*t)->NO.NInterno.Letra))
  71. (*t)->NO.NInterno.Dir = InsereEntre(k,&(*t)->NO.NInterno.Dir,i, Letra);
  72. else
  73. (*t)->NO.NInterno.Esq = InsereEntre(k,&(*t)->NO.NInterno.Esq,i, Letra);
  74. return (*t);
  75. }
  76. }
  77.  
  78. TipoArvore Insere(TipoChave *k, TipoArvore *t) {
  79.  
  80. TipoArvore p;
  81. //printf("\nInserindo na arvore a palavra: %s\n", k); // Checkin
  82. unsigned int i;
  83. unsigned char letra;
  84. //printf("\nesta chegando aqui: %c\n", *(k+1));
  85. //printf("%d", strlen(k)); APENAS CHECAGEM
  86. if (*t == NULL) {
  87. //======= ATE AQUI CHEGOU ========
  88. return (CriaNoExt(k)); // return faz sair da função
  89. }
  90. //===================ATÉ AQUI CHEGOU================
  91. else {
  92. p = *t;
  93. printf("Tamanho da string: %d", strlen(k));//chegou aqui ufa
  94. while (!EExterno(p)) {
  95. //printf("++++++++++++++++++++++++++++++++");
  96. //printf("\nTamanho da string: %d\n", strlen(k));
  97. if (*(k+((int)p->NO.NInterno.Pos)) == p->NO.NInterno.Letra)
  98. p = p->NO.NInterno.Dir;
  99. else p = p->NO.NInterno.Esq;
  100. }
  101.  
  102.  
  103. i = 0;
  104. while (i <= D && (*(k+i) == p->NO.Chave[i])){
  105. printf("%c", p->NO.Chave[i]);
  106. printf(" ESPERADO\n");// essa linha aqui tem q tirar depois
  107. //O i SAI DAQUI COM A POSIÇÃO QUE DIFERE AS DUAS PALAVRAS
  108. i++;
  109. letra = *(k+i);
  110. if(*(k+i) == '\0'){
  111. break;
  112. }
  113. printf("\nLETRA ESTA ARMAZENANDO: %c\n", letra);
  114. }
  115. //ATE AQUI CHEGOU
  116. if (i >= strlen(k) && p->NO.Chave[i] == '\0')//tem algum erro aqui
  117. { printf("Erro: chave ja esta na arvore\n"); return (*t); }
  118. else return (InsereEntre(k, t, i, letra)); //ACHO QUE O ERRO ESTA AQUI, PQ QUANDO EU RETORNO PRO MAIN O A PASSA A APONTAR PARA ESSE NO INTERNO E PERDE A POSIÇÃO DO OUTRO
  119.  
  120. }
  121. }
  122.  
  123. void insertWord(Tipovec* data){
  124. int mPalavra = 50;
  125. int i = 0;
  126. printf("\nDigite uma nova palavra:\n");
  127. *data = (Tipovec)malloc(sizeof(TipoChave)*mPalavra); // 50 caracteres = 1 palavra;
  128. scanf(" %s", &(**data));
  129. }
  130.  
  131. void Inicializa(TipoArvore *a){
  132. *a = NULL;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement