Advertisement
Bewin

infix

Dec 5th, 2023 (edited)
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4. #define MAX 50
  5. char stack[MAX];
  6. int top=-1;
  7.  
  8. int precedence(char item){
  9.     if(item=='-' || item=='+')
  10.         return 1;
  11.     if(item=='*' || item=='/')
  12.         return 2;
  13.     if(item=='^')
  14.         return 3;
  15.     if(item=='(')
  16.         return 0;
  17.     return -1;
  18. }
  19. int isOperand(char ch){
  20.     if(isdigit(ch) || islower(ch) || isupper(ch)){
  21.         return 1;
  22.     }
  23.     else
  24.         return 0;
  25. }
  26. void push(char input){
  27.     if(top==MAX-1){
  28.         printf("\nStack Overflow\n");
  29.     }
  30.     else{
  31.         stack[++top]=input;
  32.     }
  33. }
  34. int pop(){
  35.     char item;
  36.     if(top==-1){
  37.         printf("\nStack Underflow\n");
  38.         return -1;
  39.     }
  40.     else{
  41.         item=stack[top--];
  42.     }
  43.     return item;
  44. }
  45. char str[2];
  46. char* getStr(char ch){
  47.     str[0]=ch;
  48.     str[1]='\0';
  49.     return str;
  50. }
  51. void infixToPostfix(char exp[],char output[]){
  52.     int n=strlen(exp);
  53.     for(int i=0;i<n;i++){
  54.         if(isOperand(exp[i])){
  55.             strcat(output,getStr(exp[i]));
  56.         }
  57.         else if(exp[i]=='('){
  58.             push(exp[i]);
  59.         }
  60.         else if(exp[i]==')'){
  61.             while(stack[top]!='('){
  62.                 strcat(output,getStr(pop()));
  63.             }
  64.             pop();
  65.         }
  66.         else{
  67.             while(top!=-1 && precedence(exp[i])<=precedence(stack[top])){
  68.                     strcat(output,getStr(pop()));
  69.             }
  70.             push(exp[i]);
  71.         }
  72.     }
  73.     if(top!=-1){
  74.         for(int i=top;exp[i]!=0;--i){
  75.             strcat(output,getStr(stack[i]));
  76.         }
  77.     }
  78. }
  79.  
  80. int main(){
  81.     char exp[MAX],output[MAX];
  82.     output[0]='\0';
  83.     printf("Enter the expression:\n");
  84.     scanf("%s",exp);
  85.     infixToPostfix(exp,output);
  86.     printf("\nPostfix expression is %s\n",output);
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement