-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path7_InfixPostfix.c
91 lines (82 loc) · 2.01 KB
/
7_InfixPostfix.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
7. Write a program to convert an infix expression to postfix expression.
*/
#include <stdio.h>
#include <ctype.h>
#define MAX 15
char stack[MAX], top = -1;
void isEmpty() { // Check if the stack is empty
if(top == -1) {
printf("STACK UNDERFLOW");
}
}
void isFull() { // Check if the stack is full
if(top == MAX) {
printf("STACK OVERFLOW"); // If the stack is full, print overflow
}
}
void push(char x) { // Push an element into the stack
if(top == MAX) { // If the stack is full
isFull(); // Print overflow
}
else {
stack[++top]=x; // Else push the element into the stack
}
}
char pop() { // Pop an element from the stack
if(top == -1) { // If the stack is empty
isEmpty(); // Print underflow
}
else {
return stack[top--]; // Else pop the element from the stack
}
}
int priority(char x) { // Return the priority of the operator
if(x == '(') {
return 0;
}
if(x == '+' || x == '-') {
return 1;
}
if(x == '*' || x == '/') {
return 2;
}
if(x == '^') {
return 3;
}
}
int main() {
char X[MAX];
char *e, x;
int ch = 1;
while(ch) {
printf("\nEnter INFIX Expression:");
scanf("%s",X);
e = X;
printf("\nThe POSTFIX Expression:");
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());
}
}
return 0;
}