Algoritmo de Transformar expressão de pós-fixa para pré-fixa

/* Algoritmo de Transformar expressão de pós-fixa para pré-fixa - Estrutura de Dados
| Kássio Rômulo Lima SOusa CP09126-81 | Núbia Cristine Silveira dos Santos CP09142-81 |
*/
>>>> main.cpp <<<<
#define TRUE 1
#define FALSE 0
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<math.h>

#include "stack.h"

/* Função para calculos básicos, adição, subtração, multiplicação e divisão */
int calc(int op1, int op2, char opcao){
int aux=0;
if(opcao == '+'){
aux = op1 + op2;
}
if(opcao == '-'){
aux = op1 - op2;
}
if(opcao == '*'){
aux = op1 * op2;
}
if(opcao == '/'){
aux = op1 / op2;
}
if(opcao == '^'){
aux = pow((float)op1,(float)op2);
}
return aux;
}
/* Funcao para avaliar a expressao posfixa e fazer todas as possibilidades */
void transforma(){
int i=0;
int op1, op2, resultado, valor, elemento;
char expressao[60], *aux;
stack *form;

printf("Digite uma expressão pos-fixa: ");
scanf("%s", expressao);
form = stkCreate(strlen(expressao));

while(i < strlen(expressao)){
aux = expressao[i];
if((expressao[i] == '+') || (expressao[i] == '-') || (expressao[i] == '*') || (expressao[i] == '/') ||(expressao[i] == '^') ){
op1 = (int) stkpop(form);
op2 = (int) stkpop(form);
valor = calc(op1, op2, aux);
stkpush(form, (void*)valor);
}else{
elemento = atoi(&aux);
stkpush(form, (void*) elemento);
}
i++;
}
resultado = (int)stkpop(form);
printf("Resultado da operacao = %d\n", resultado);
free(form);
}
int main(void){
transforma();
system("pause");
}
>>>> sllist.cpp <<<<
/* Algoritmo de Transformar expressãod e pós-fixa para pré-fixa - Estrutura de Dados
| Kássio Rômulo Lima SOusa CP09126-81 | Núbia Cristine Silveira dos Santos CP09142-81 |
*/
#define _STACK_H_
#define TRUE 1
#define FALSE 0
#include <stdio.h>
#include <assert.h>
#include "stack.h"
/* FUnção para criar e alocar espaço para a lista */
sllist *sllcreate(void){
sllist *l;
l = (sllist *)malloc(sizeof(sllist));
if(l != NULL){
l->first = NULL;
return l;
}
return NULL;
}
/* Função ara destruir a lista */
int seldestroy(sllist *l){
if(l != NULL){
if(l->first == NULL){
free(l);
return true;
}
}
return false;
}
/* Função para inserir um elemento na primeira posição */
int selinsertfirst(sllist *l, void *data){
slnode *novono;
if(l != NULL){
novono = (slnode *)malloc(sizeof(slnode));
if(novono != NULL){
novono->data = data;
if(l->first == NULL){
novono->next = NULL;
}else{
novono->next = l->first;
}
l->first = novono;
return true;
}
return false;
}
int selinsertlast(sllist *l, void *newdata);
/* Função para remover o primeiro elemento */
void *sllremovefisrt(sllist *l){
void *aux;
slnode *node;
if(l-> first == NULL){
return NULL;
}else{
aux = (l->first)->data;
node = l->first;
l->first = l->first->next;
free(node);
return aux;
}
}
return NULL;
}
void *sllremovelast(sllist *l);
/* Fim das funções */
>>>> sllist.h <<<<
/*Folha de protótipos das funções utilizadas no programa*/
#ifndef __STACK_H_
#define __STACK_H_
/* Estrutura stack */
typedef struct _sllist_{
int maxitens;
int topo;
void ** item;
}sllist;
typedef struct _sllnode_{
void *data;
struct _sllnode_ *next;
}slnode;

sllist *sllcreate(void);
int seldestroy(sllist *l);
int selinsertfirst(sllist *l, void *data);
int selinsertlast(sllist *l, void *newdata);
void *sllremovelast(sllist *l);
void *sllremovefisrt(sllist *l);
#endif
--------------------------------------------------------------------------------

Pronto agora só aproveitar o codigo está em sua maioria comentado.