Infix to Postfix using C – 32 PPT – Albert Hendry Harsono (1701296914)
#include <stdio.h> #include <stdlib.h> #include <string.h> char op[50]; struct node { char data; struct node *next; }*head=0; void push(char x) { if(head==NULL) { head=(struct node *)malloc(sizeof(struct node)); head->data=x; head->next=NULL; } else { struct node *p; p=(struct node *)malloc(sizeof(struct node)); p->data=x; p->next=head; head=p; } } char pop() { char c; struct node *p; if (head==NULL) { printf("the stack is empty\n"); } else { c=head->data; p=head->next; free (head); head=p; } return c; } void display(struct node *start) { { struct node *p; p=start; if(p==NULL) printf("Empty list"); else { while(p!=NULL) { printf("%c->",p->data); p=p->next; } printf("NULL\n"); } } } int priority(char s, char c) { if ( (c=='^' && s=='+') || s=='-' ||s=='/' || s=='*') return 1; else if( c=='*' || c=='/') { if(s=='+' || s=='-' ) return 1; else return 0; } else if( c=='+' || c=='-' ) return 0; return -1; } void convert(char s[], int n) { int i,j;//,x; for(i=0,j=0;i<n;i++) { if ((s[i]>='0'&&s[i]<='9') || (s[i]>='a' && s[i]<='z')|| (s[i]>='A' && s[i]<='Z')) { op[j]=s[i]; j++; } else if(s[i]=='(') { push(s[i]); } else if (s[i]=='+' || s[i]=='/' || s[i]=='-' || s[i]=='*' || s[i]=='^') { if( head==NULL) push(s[i]); else if(head->data=='(') push(s[i]); else if(priority(head->data, s[i] )!=1) push(s[i]); else { op[j]=pop(); j++; push(s[i]); } } else if(s[i]==')') { while(head!=NULL && head->data!='(') { op[j]=pop(); j++; } pop(); } } while(head!=NULL) { op[j]=pop(); j++; } } int main() { int i,n; char c[50]; n=strlen(c); do { printf("Masukkan Infix [max 50 karakter]: "); scanf("%s",c); }while(n>50 || n<1); n=strlen(c); convert(c,n); printf("Notasi postfix-nya adalah: "); for(i=0;i<n;i++) { printf("%c",op[i]); } getchar(); getchar(); return 0; }