Advertisement
Guest User

calc_polonesa.c

a guest
Nov 14th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1. #include "pilha.h"
  2. #include "arvore_binaria.h"
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5. #include<string.h>
  6.  
  7. void manipulacao_arvores(Pilha* nova_pilha, char* string_insercao){//função responsável por manipular as árvores na pilha e fundí-las; a subárvore que contem o operador (arvore_mae)
  8. //recebe o topo da pilha como subarvore esquerda; o topo da pilha é removido; a subarvore do novo topo
  9. // da pilha é inserida como subárvore direita da arvore_mae;
  10.  
  11. printf("entrei em amnipulação arvores\n");
  12. Arvore_Binaria* arvore_mae = arvore_criar(string_insercao);//arvore_mae contem o nó raiz que armazena o operador;
  13.  
  14. Arvore_Binaria* subarvore_esquerda = pilha_topo_arvore(nova_pilha);
  15. Arvore_Binaria* nova_arvore = arvore_fusao_esquerda(subarvore_esquerda, arvore_mae);
  16.  
  17. arvore_apontar_null(subarvore_esquerda);//esta função evita que se perca referência para a subarvore
  18. //direita ou esquerda que foi retirada do topo da pilha e fundida a outra árvore no momento
  19. //em que a memória da subarvore for desalocada;
  20. pilha_remover(nova_pilha);
  21.  
  22.  
  23. Arvore_Binaria* subarvore_direita = pilha_topo_arvore(nova_pilha);
  24. nova_arvore = arvore_fusao_direita(subarvore_direita, arvore_mae);
  25. arvore_apontar_null(subarvore_direita);
  26. pilha_remover(nova_pilha);
  27.  
  28. printf("imprimindo a arvore montada em pré ordem:\n");
  29. arvore_imprimir(nova_arvore);
  30. pilha_inserir_arvore(nova_pilha, nova_arvore);
  31.  
  32. }
  33.  
  34. int main(){
  35.  
  36. char vet_entrada[100];
  37. fgets(vet_entrada, 100, stdin);
  38.  
  39. char** entrada_processada = (char**)malloc(50*sizeof(char*));//cada posição de entrada processada possui uma string que será o item do tad arvore
  40. for(int i=0; i<50; i++){
  41. entrada_processada[i] = (char*)malloc(1000 * sizeof(char));
  42. }
  43.  
  44. char* token_atual;
  45.  
  46. int i=0;
  47. token_atual = strtok(vet_entrada, " ");
  48.  
  49. while(token_atual != NULL){
  50. // printf("AQUI token_atual é: %s\n", token_atual);
  51. strcpy(entrada_processada[i], token_atual);
  52. //printf("2 entrada processada é: %s\n", entrada_processada[i]);
  53. i++;
  54. token_atual = strtok(NULL, " ");
  55. }
  56.  
  57. /* for(int j=0; j < i; j++){ //teste da entrada
  58. printf("entrada_processada[%d] é: %s-\n", j, entrada_processada[j]);
  59. }
  60. */
  61. Pilha* nova_pilha = pilha_criar();
  62.  
  63. for(int j=0; j<i; j++){//inserção das strings na pilha; ocorre o processo de montagem da árvore com a expressão posfixada correspondente;
  64.  
  65. if( strcmp(entrada_processada[j], "*") == 0 || strcmp(entrada_processada[j], "-") == 0 || strcmp(entrada_processada[j], "+") == 0 || strcmp(entrada_processada[j], "/") == 0 ){
  66. char string_insercao[5];
  67. strcpy(string_insercao, entrada_processada[j]);
  68. printf("a string_insercao é: %s\n", string_insercao);
  69. Arvore_Binaria* arv = arvore_criar(string_insercao);
  70. pilha_inserir_arvore(nova_pilha, arv);
  71.  
  72. }
  73. else{
  74.  
  75. char string_insercao[5];
  76. strcpy(string_insercao, entrada_processada[j]);
  77. Arvore_Binaria* arv = arvore_criar(string_insercao);
  78. pilha_inserir_arvore(nova_pilha, arv);
  79. printf("a string_insercao no else é: %s\n", string_insercao);
  80. printf("entrei no else, pilha vazia? %d\n", pilha_vazia(nova_pilha));
  81. manipulacao_arvores(nova_pilha, string_insercao);
  82.  
  83. }
  84. //explicar o algoritmo
  85. }
  86.  
  87.  
  88. return 0;
  89. }
  90.  
  91. //dar free nas strings da entrada
  92. //dar free nos tads
  93. //dar free na árvore que estava na pilha;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement