Last active
January 12, 2021 20:43
-
-
Save AakashCode12/2c0555169c03874ecd8b49f2ad00dce8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<stdlib.h> | |
#include<ctype.h> | |
#include<string.h> | |
#define SIZE 100 | |
char stack[SIZE]; | |
int top = -1; | |
//push function for stacks | |
void push(char item) | |
{ | |
if(top >= SIZE-1) | |
{ | |
printf("\nStack Overflow."); | |
} | |
else | |
{ | |
top = top+1; | |
stack[top] = item; | |
} | |
} | |
//pop function | |
char pop() | |
{ | |
char item ; | |
if(top <0){ | |
printf("stack under flow: invalid infix expression"); | |
getchar(); | |
exit(1); | |
} | |
else{ | |
item = stack[top]; | |
top = top-1; | |
return(item); | |
} | |
} | |
int is_operator(char symbol){ | |
if(symbol == '^' || symbol == '*' || symbol == '/' || symbol == '+' || symbol =='-'){ | |
return 1; | |
} | |
else{ | |
return 0; | |
} | |
} | |
int precedence(char symbol) | |
{ | |
if(symbol == '^') | |
{ | |
return(3); | |
} | |
else if(symbol == '*' || symbol == '/') | |
{ | |
return(2); | |
} | |
else if(symbol == '+' || symbol == '-') | |
{ | |
return(1); | |
} | |
else | |
{ | |
return(0); | |
} | |
} | |
void InfixToPostfix(char infix_exp[], char postfix_exp[]) | |
{ | |
int i, j; | |
char item; | |
char x; | |
push('('); | |
strcat(infix_exp,")"); | |
i=0; | |
j=0; | |
item=infix_exp[i]; | |
while(item != '\0') | |
{ | |
if(item == '(') | |
{ | |
push(item); | |
} | |
else if( isdigit(item) || isalpha(item)) | |
{ | |
postfix_exp[j] = item; | |
j++; | |
} | |
else if(is_operator(item) == 1) | |
{ | |
x=pop(); | |
while(is_operator(x) == 1 && precedence(x)>= precedence(item)) | |
{ | |
postfix_exp[j] = x; | |
j++; | |
x = pop(); | |
} | |
push(x); | |
push(item); | |
} | |
else if(item == ')') | |
{ | |
x = pop(); | |
while(x != '(') | |
{ | |
postfix_exp[j] = x; | |
j++; | |
x = pop(); | |
} | |
} | |
else | |
{ /* if current symbol is neither operand not '(' nor ')' and nor | |
operator */ | |
printf("\nInvalid infix Expression.\n"); /* the it is illegeal symbol */ | |
getchar(); | |
exit(1); | |
} | |
i++; | |
item = infix_exp[i]; | |
} | |
if(top>0) | |
{ | |
printf("\nInvalid infix Expression.\n"); | |
getchar(); | |
exit(1); | |
} | |
if(top>0) | |
{ | |
printf("\nInvalid infix Expression.\n"); | |
getchar(); | |
exit(1); | |
} | |
postfix_exp[j] = '\0'; | |
} | |
//main function | |
int main() | |
{ | |
char infix[SIZE], postfix[SIZE]; | |
printf("\nEnter Infix expression : "); | |
gets(infix); | |
InfixToPostfix(infix,postfix); | |
printf("Postfix Expression: "); | |
puts(postfix); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment