I'm trying to make a code that makes a function get Ex: 4 + 2 for a postfix Ex: 42+, I can not get the priority of the elements, type, when I make the expression 4 + 2 * 8 the right and print 428 * +, but you're printing 42 * 8 +, because of the mathematical priority that's wrong in my code, follow the code below
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 1000
#include <stdbool.h>
typedef struct key{
char tipo;
}TipoItem;
typedef struct pilha{
TipoItem item[max];
int topo;
}Pilha;
void criapilha(Pilha *pi){
pi->topo=0;
}
void empilha(Pilha *pi,TipoItem c){
if(pi->topo == max){
printf("Pilha cheia.\n");
return;
}
else{
pi->item[pi->topo] = c;
pi->topo++;
}
}
int vazia(Pilha pi){
return (pi.topo == 0);
}
void desempilha(Pilha *pi,TipoItem *x){
char c;
if(vazia(*pi)){
//printf("Pilha vazia.\n");
return;
}
else{
*x = pi->item[pi->topo-1];
pi->topo--;
}
}
void printa(Pilha *pi){
if(pi->topo == 0){
printf("Pilha vazia.\n");
return;
}
else{
int i;
for(i=0;i<pi->topo;i++){
printf("%c ",pi->item[i]);
}
}
}
int prioridade(char a, char b){
if('a' <= 'c')
return 1;
else
return 0;
}
int main(){
Pilha pi; criapilha(&pi);
TipoItem elemento,pop;
char funcao[max];
int i,j=0;
int p = prioridade('a','b');
printf("%d",p);
scanf("%[^\n]",funcao);
for(i=0;i<strlen(funcao);i++){
elemento.tipo = funcao[i];
if(elemento.tipo == '-' || elemento.tipo == '+' || elemento.tipo == '/' || elemento.tipo == '^' || elemento.tipo == '*' || elemento.tipo == '(' || elemento.tipo == ')'){
if(pi.topo == 0 || elemento.tipo == '('){
empilha(&pi,elemento);
}
else if(pi.topo == 0 || elemento.tipo == ')'){
while(pi.topo>0 && pop.tipo!= '('){
printa(&pi);
desempilha(&pi,&pop);
}
desempilha(&pi,&pop);
}else{
while(pi.topo > 0){
printa(&pi);
desempilha(&pi,&pop);
}
empilha(&pi,elemento);
}
}else{
printf("%c",elemento.tipo);
}
}
//printf("%c",elemento.tipo);
while(pi.topo > 0){
printa(&pi);
desempilha(&pi,&pop);
}
return 0;
}