Infixa para Pós-fixa em C
Publicado por Ivan Rocha 01/11/2007
[ Hits: 34.493 ]
Homepage: http://homes.dcc.ufba.br/~ivan062/bahia
Programa que recebe como entrada uma Notação Infixa bem-formada (Ex: (A+B*C); (A*(B+C)/D-E); A+B*(C-D*(E-F)-G*H)-I*3 ) e retorna sua respectiva Notação Pós-fixa (Ex: ABC*+; ABC+*D/E-; ABCDEF-*-GH*-*+I3*-).
É feito utilizando 2 pilhas: uma auxiliar e a pilha Pós-fixa, que conterá a Expresão Pós-Fixa que será impressa no final.
# include <stdio.h> # include <stdlib.h> typedef struct _Pilha { char op; struct _Pilha *prox; }Pilha; void transfereTempPos( Pilha **pPos, Pilha **pTemp, Pilha *aux ) { aux = ( *pTemp ) -> prox; ( *pTemp ) -> prox = *pPos; *pPos = *pTemp; *pTemp = aux; } void alocaCharNaPilha( Pilha **pilha, Pilha *aux, char op ) { aux = ( Pilha *) malloc( sizeof( Pilha ) ); aux -> op = op; aux -> prox = *pilha; *pilha = aux; } void leOperacao( Pilha **pPos, Pilha **pTemp ) { char op; Pilha *aux; scanf( "%c", &op ); while( op != '\n' ) { switch( op ) { case '+': case '-': while( ( *pTemp ) && ( (*pTemp) -> op != '(' ) ) { transfereTempPos( &( *pPos ), &( *pTemp ), aux ); } alocaCharNaPilha( &( *pTemp ), aux, op ); break; case '*': case '/': while( ( *pTemp ) && ( (*pTemp) -> op != '+' && (*pTemp) -> op != '-' && (*pTemp) -> op != '(' ) ) { transfereTempPos( &( *pPos ), &( *pTemp ), aux ); } alocaCharNaPilha( &( *pTemp ), aux, op ); break; case ')': while( ( *pTemp ) && ( (*pTemp) -> op != '(' ) ) { transfereTempPos( &( *pPos ), &( *pTemp ), aux ); } if( (*pTemp) && (*pTemp) -> op == '(' ) { aux = *pTemp; *pTemp = (*pTemp) -> prox; free( aux ); } break; case '(': alocaCharNaPilha( &( *pTemp ), aux, op ); break; default: alocaCharNaPilha( &( *pPos ), aux, op ); break; } scanf( "%c", &op ); } while( *pTemp ) { alocaCharNaPilha( &( *pTemp ), aux, op ); } } void imprime( Pilha *topo ) { if( topo ) { imprime( topo -> prox ); printf( "%c", topo -> op ); } } int main() { Pilha *pPos = NULL; Pilha *pTemp = NULL; printf( "Operacao Infixa: " ); leOperacao( &pPos, &pTemp ); printf( "Operacao Posfixa: " ); imprime( pPos ); printf( "\n" ); return 0; }
Programa para cálculo de números complexos
Função para concatenar texto ilimitada
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém que utilize o Warsaw do BB no Ubuntu 24.04 (1)
Usar uma VM dentro do meu notebook como firewall para um dispositivo e... (1)