c code for infix to postfix conversion

  • carray_stack
  • implement of infix to postfix and prefix conversion

    WAP to convert an infix expression into its equivalent postfix notation and into its equivalent prefix notation

    Code

    #include <stdio.h> #include <stdlib.h> #include <string.h> struct stack { int size; int top; char *arr; }; int isEmpty(struct stack *ptr) { if (ptr->top == -1) { return 1; } else { return 0; } } int isFull(struct stack *ptr) { if (ptr->top == ptr->size - 1) { return 1; } else { return 0; } } char stackTop(struct stack *sp) { return sp->arr[sp->top]; } void push(struct stack *ptr, char val) { if (isFull(ptr)) { printf("Stack Overflow! Cannot push %d to the stack\n", val); } else { ptr->top++; ptr->arr[ptr->top] = val; } } char pop(struct stack *ptr) { if (isEmpty(ptr)) { printf("Stack Underflow! Cannot pop from the stack\n"); return -1; } else { char val = ptr->arr[ptr->top]; ptr->top--; return val; } } int precedence(char ch) { if (ch == '^') return 3; else if (ch == '*' || ch == '/') return 2; else if (ch == '+' || ch == '-') return 1; else return 0; } int isOperator(char ch) { if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '^') return 1; else return 0; } char *infixToPostfix(char *infix) { struct stack *sp = (struct stack *)malloc(sizeof(struct stack)); sp->size = 10; sp->top = -1; sp->arr = (char *)malloc(sp->size * sizeof(char)); char *postfix = (char *)malloc((strlen(infix) + 1) * sizeof(char)); int i = 0; int j = 0; while (infix[i] != '\0') { if (!isOperator(infix[i])) { postfix[j] = infix[i]; j++; i++; } else { if (precedence(infix[i]) > precedence(stackTop(sp))) { push(sp, infix[i]); i++; } else { postfix[j] = pop(sp); j++; } } } while (!isEmpty(sp)) { postfix[j] = pop(sp); j++; } postfix[j] = '\0'; return postfix; } char *infixToPrefix(char *infix) { int l = strlen(infix); // Reverse infix strrev(infix); for (int i = 0; i < l; i++) { if (infix[i] == '(') { infix[i] = ')'; i++; } else if (infix[i] == ')') { infix[i] = '('; i++; } } char *prefix = (char *)malloc((strlen(infix) + 1) * sizeof(char)); prefix = infixToPostfix(infix); // Reverse postfix strrev(prefix); return prefix; } int main() { char s[50]; printf("enter the expression : "); gets(s); printf("%s", infixToPostfix(s)); printf("\n"); printf("%s", infixToPrefix(s)); return 0; }