Advertisement
Guest User

Untitled

a guest
Jan 29th, 2015
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <malloc.h>
  5.  
  6.  
  7. struct no {
  8.  
  9. char nome[30];
  10. struct no *direita;
  11. struct no *esquerda;
  12.  
  13.  
  14. };
  15.  
  16. struct no *raiz; //Ponteiro da raiz
  17. struct no *alocar; //Ponteiro para fazer alocação
  18.  
  19.  
  20. struct no * buscar(char *nome) {
  21.  
  22. struct no *ponteiro;
  23.  
  24. ponteiro = raiz;
  25.  
  26. while (ponteiro) {
  27.  
  28. if (strcmp(nome, ponteiro->nome)==0) //Faz a comparação de strings
  29. return ponteiro; //Retorna ponteiro se o encontrar
  30.  
  31. if (strcmp(nome, ponteiro->nome)>0)
  32. ponteiro = ponteiro->direita;
  33.  
  34. else
  35. ponteiro = ponteiro->esquerda;
  36.  
  37. }
  38.  
  39. return NULL; //Retorna o ponteiro nulo
  40. }
  41.  
  42.  
  43. void inserir(char *nome) {
  44.  
  45. alocar = (struct no *) malloc(sizeof(struct no)); //Faz alocação na memória
  46.  
  47. if (!alocar) { //Se não for possível a alocação, sai do programa
  48. printf("Falta de memória");
  49. exit(0);
  50. }
  51.  
  52. strcpy(alocar->nome, nome); //Copia o nome para o novo nó alocado
  53.  
  54. if (!raiz) { //Se não houver elemento ainda na árvore, insere na raiz
  55. raiz = alocar;
  56. }
  57.  
  58. else
  59.  
  60. {
  61. //ponteiros para busca
  62. struct no *ponteiro;
  63. struct no *ponteiroAnterior;
  64. ponteiro = raiz; //ponteiro inicia na raiz
  65. ponteiroAnterior = NULL; //anterior inicial em NULL
  66.  
  67.  
  68. while (ponteiro) { //Faz a busca do lugar ao qual deve ser inserido o nó
  69.  
  70. ponteiroAnterior = ponteiro;
  71.  
  72. if (strcmp(nome, ponteiro->nome)==0) {
  73. printf("\nnome inserido já existe!");
  74. return;
  75. }
  76.  
  77. if (strcmp(nome, ponteiro->nome)>0){
  78. ponteiro = ponteiro->direita;
  79. }
  80. else {
  81. ponteiro = ponteiro->esquerda;
  82. }
  83. }
  84.  
  85. if (strcmp(nome, ponteiroAnterior->nome)>0) {
  86. ponteiroAnterior->direita = alocar;
  87. //atribui o endereço de alocação ao ponteiro da direita do nó anterior
  88. }
  89. else {
  90. ponteiroAnterior->esquerda = alocar;
  91. //atribui o endereço de alocação ao ponteiro da esquerda do nó anterior
  92. }
  93. }
  94. }
  95.  
  96. /*Faz o caminhamento em ordem recursivamente*/
  97. void caminharEmOrdem(struct no *ponteiro) {
  98. if (ponteiro) {
  99. caminharEmOrdem(ponteiro->esquerda);
  100. printf("\n%s", ponteiro->nome);
  101. caminharEmOrdem(ponteiro->direita);
  102. }
  103. }
  104.  
  105.  
  106. int main() {
  107. FILE *arq;
  108. char nome[30];
  109. scanf("%s",&nome);
  110. arq = fopen(nome,"r");
  111. if(arq == NULL){
  112. exit(0);
  113. }
  114. else{
  115. int cont=0;
  116. char palavra[50];
  117. FILE * arq;
  118. scanf("%s", nome);
  119. arq = fopen(nome, "r");
  120. while (!feof(arq)) {
  121. fscanf(arq ,"%s", palavra);
  122. inserir(palavra);
  123. }
  124.  
  125. }
  126. caminharEmOrdem(raiz);
  127.  
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement