#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//moshakhas konanndeye meghdare poshte
#define size 20
char stack[size];
int top=0,ele;
void push();
char pop();
int isempty();
int isfull();
char infix[30],PostFix[30];
int prec(char);
//tabea baraye gharar dadane amalgar dar poshte
void push(int ele)
{
    stack[top]=ele;
    top++;
}
//method baraye baddashtan az poshte
char pop()
{
    top--;
    return(stack[top]);
}
//method baraye moshakhkhas kardane olaviyate amalgarha
int prec(char symbol)
{
if(symbol== '(')
return 0;
if(symbol== ')')
return 0;
if(symbol=='+' || symbol=='-')
return 1;
if(symbol=='*' || symbol=='/')
return 2;
if(symbol=='^')
return 3;
return 0;
}
void main()
{
 int i=0,j=0,k=0,length;
        char temp;
        printf("\nEnter an infix expression:");
        scanf("%s",infix);
        length=strlen(infix);
        for(i=0;i        {
           //agar amalgar nist be postfix an ra ezafe kon
            if(infix[i]!='+' && infix[i]!='-' && infix[i]!='*' && infix[i]!='/' && infix[i]!='^' && infix[i]!=')' && infix[i]!='(' )
    PostFix[j++]=infix[i];
            //agar amalgar ast dastorate zir ra anjam bede
            else
            {
                if(top==0) //agar poshte khali ast be ebtedaye poshte ezafe va top ra afzayesh bede
      push(infix[i]);
                else
                {  
     //agar charachter ( ya ) nist olaviyate an ra check kon
                    if(infix[i]!=')' && infix[i]!='(')
                    {
      //agar olaviyate char feali az ghabli payeen ta ast
      //masalan alan + ghabli * ast * ra bardar be postfiz ezafe kon va baed + ra be stack ezafe kon
                        if(    prec(infix[i]) <= prec(stack[top-1])  )
                        {
                        temp=pop();
                        PostFix[j++]=temp;
                        push(infix[i]);
                        }
      //dar gheyre insorate charachter ra be stack ezafe kon
                        else
                        push(infix[i]);
                    }
                    else
                    {
      //agar ( ast pas bayad be poshte ezafe shavad
                        if(infix[i]=='(')
                             push(infix[i]);
      //agar ) ast bayad ta residan be ( az poshte bardashte shavad va be postfix ezafe shavad
                        if(infix[i]==')')
                        {
       temp=pop();
       while(temp!='(')
       {
        PostFix[j++]=temp;
        temp=pop();
          }
                        }
                    }
                }
            }   
        }
  //ta zamani ke poshte khali nashode ast tak tak anasor ra az ebtedaye poshte bardar va
  //be arraye postfix ezafe kon
        while(top!=0)
            PostFix[j++]=pop();
  printf("the Postfix expression is: %s\n",PostFix);
  getch();
}