#include <stdio.h> #include <stdlib.h> #include<strings.h> struct Node { char data; struct Node *next; }*top=NULL; void push(char x) { struct Node *t; t=(struct Node*)malloc(sizeof(struct Node)); if(t==NULL) printf("stack is full\n"); else { t->data=x; t->next=top; top=t; } } char pop() { struct Node *t; char x=-1; if(top==NULL) printf("Stack is Empty\n"); else { t=top; top=top->next; x=t->data; free(t); } return x; } int pre(char x) { if(x=='+' || x=='-') return 1; else if(x=='*' || x=='/') return 2; else if(x=='^') return 3; return 0; } int isOperand(char x) { if(x=='+' || x=='-' || x=='*' || x=='/'||x=='^'||x==')') return 0; else return 1; } char *intopost(char infix[]) { int i=0,j=0; // push('('); // strcat(infix,')'); char *postfix; int len=strlen(infix); postfix=(char*)malloc((len+2)*sizeof(char)); while(infix[i]!='\0') { if(infix[i]=='(') push(infix[i++]); else if(isOperand(infix[i])) postfix[j++]=infix[i++]; else if(infix[i]==')') { char x=pop(); while(x!='(') { postfix[j++]=x; x=pop(); } i++; } else { if(top==NULL) push(infix[i++]); else if(pre(infix[i])>pre(top->data)) push(infix[i++]); else postfix[j++]=pop(); } } while(top!=NULL) postfix[j++]=pop(); postfix[j]='\0'; return postfix; } int main() { int n; scanf("%d",&n); char infix[n]; for(int i=0;i<n;i++) scanf("%c",&infix[i]); int i=0,j=n-1; while(i<j) { char temp=infix[i]; infix[i]=infix[j]; infix[j]=temp; } //printf("%s",infix); char *postfix=intopost(infix); i=0,j=n-1; while(i<j) { char temp=postfix[i]; postfix[i]=postfix[j]; postfix[j]=temp; } for(int i=0;i<n;i++) scanf("%c",postfix[i]); // printf("%s ",postfix); return 0; }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter