56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
|
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
#define MAX_SIZE 100
|
||
|
#define MAX_EXPR_LEN 200
|
||
|
|
||
|
char stack[MAX_SIZE][MAX_EXPR_LEN];
|
||
|
int top = -1;
|
||
|
|
||
|
void push(const char* item) {
|
||
|
if (top >= MAX_SIZE - 1) {
|
||
|
printf("Stack Overflow\n");
|
||
|
return;
|
||
|
}
|
||
|
strcpy(stack[++top], item);
|
||
|
}
|
||
|
|
||
|
char* pop() {
|
||
|
if (top < 0) {
|
||
|
printf("Stack Underflow\n");
|
||
|
return NULL;
|
||
|
}
|
||
|
return stack[top--];
|
||
|
}
|
||
|
|
||
|
int isOperator(char c) {
|
||
|
return (c == '+' || c == '-' || c == '*' || c == '/' || c == '^');
|
||
|
}
|
||
|
|
||
|
void postfixToInfix(const char* postfix) {
|
||
|
char op1[MAX_EXPR_LEN], op2[MAX_EXPR_LEN], temp[MAX_EXPR_LEN];
|
||
|
|
||
|
for (int i = 0; postfix[i] != '\0'; i++) {
|
||
|
if (!isOperator(postfix[i])) {
|
||
|
temp[0] = postfix[i];
|
||
|
temp[1] = '\0';
|
||
|
push(temp);
|
||
|
} else {
|
||
|
strcpy(op2, pop());
|
||
|
strcpy(op1, pop());
|
||
|
sprintf(temp, "(%s%c%s)", op1, postfix[i], op2);
|
||
|
push(temp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
printf("Infix expression: %s\n", stack[top]);
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
char postfix[MAX_SIZE];
|
||
|
printf("Enter postfix expression: ");
|
||
|
gets(postfix);
|
||
|
postfixToInfix(postfix);
|
||
|
return 0;
|
||
|
}
|