Advertisement
sconetto

Notação Polonesa Reversa

May 3rd, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.16 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char *infixa_posfixa(char *inf){
  6.   char *posfixa;
  7.   char *pilha;
  8.   int topo, n, i, j;
  9.   n = strlen(inf);
  10.   posfixa = malloc(n*sizeof(char));
  11.   pilha = malloc(n*sizeof(char));
  12.   topo = 0;
  13.   pilha[topo++] = inf[0];
  14.   for (j=0, i=1; inf[i] != 0; i++){
  15.     switch (inf[i]) {
  16.       case '(':
  17.         pilha[topo++] = int[i];
  18.         break;
  19.       case ')':
  20.         while(1){
  21.           x = pilha[--topo];
  22.           if (x == '(')
  23.             break;
  24.           posfixa[j++] = x;
  25.         }
  26.         break;
  27.       case '+':
  28.       case '-':
  29.         while(1){
  30.           x = pilha[topo-1];
  31.           if(x=='(')
  32.             break;
  33.           topo--;
  34.           posfixa[j++] = x;
  35.         }
  36.         pilha[topo++] = inf[i];
  37.         break;
  38.       case '*':
  39.       case '/':
  40.         while(1){
  41.           x = pilha[topo-1];
  42.           if(x == '(' || x == '+' || x == '-')
  43.             break;
  44.           topo--;
  45.           posfixa[j++]= x;
  46.         }
  47.         pilha[topo++] = inf[i];
  48.         break;
  49.       default;
  50.         posfixa[j++] = inf[i];
  51.     }
  52.   }
  53.   free(pilha);
  54.   posfixa[j] = '\0';
  55.   return posfixa;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement