Infixa para Pós-fixa em C
Publicado por Ivan Rocha 01/11/2007
[ Hits: 34.568 ]
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; }
Funções de soma e subtração de matrizes alocadas dinamicamente
Shadow Mapping usando OpenGL e Cg
Painel de configuração placas ati
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Realizar overclock no Miyoo Mini (plus ou normal)
Otimização de memória para máquinas modestas
Unbuntu não atualiza o firmware [RESOLVIDO] (2)
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (0)
Dúvidas sobre a originalidade de conteúdos online (10)
Erro de interface de Rede no Virt Manager dentro Debian 13 KDE (12)