Created
September 9, 2017 01:48
-
-
Save amithkk/f81302f8d8209984474c6e8677c385ab 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
for (i = 0; exp[i]; ++i) | |
{ | |
// If the scanned character is an operand (number here), | |
// push it to the stack. | |
if (isdigit(exp[i])) | |
push(stack, exp[i] - '0'); | |
// If the scanned character is an operator, pop two | |
// elements from stack apply the operator | |
else | |
{ | |
int val1 = pop(stack); | |
int val2 = pop(stack); | |
switch (exp[i]) | |
{ | |
case '+': push(stack, val2 + val1); break; | |
case '-': push(stack, val2 - val1); break; | |
case '*': push(stack, val2 * val1); break; | |
case '/': push(stack, val2/val1); break; | |
} | |
} | |
} | |
return pop(stack); | |
int priority(char x) | |
{ | |
if(x == '(') | |
return 0; | |
if(x == '+' || x == '-') | |
return 1; | |
if(x == '*' || x == '/') | |
return 2; | |
} | |
main() | |
{ | |
char exp[20]; | |
char *e, x; | |
printf("Enter the expression :: "); | |
scanf("%s",exp); | |
e = exp; | |
while(*e != '\0') | |
{ | |
if(isalnum(*e)) | |
printf("%c",*e); | |
else if(*e == '(') | |
push(*e); | |
else if(*e == ')') | |
{ | |
while((x = pop()) != '(') | |
printf("%c", x); | |
} | |
else | |
{ | |
while(priority(stack[top]) >= priority(*e)) | |
printf("%c",pop()); | |
push(*e); | |
} | |
e++; | |
} | |
while(top != -1) | |
{ | |
printf("%c",pop()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment