Assignment No.
Name – Siddhesh Shivaji Kumbhar Roll No – 100
Expression Conversion Using Stack
Code -
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 100
struct Stack {
char arr[MAX];
int top;
};
void init(struct Stack *s) {
s->top = -1;
}
int isEmpty(struct Stack *s) {
return s->top == -1;
}
void push(struct Stack *s, char value) {
if (s->top == MAX - 1) {
printf("Stack overflow!\n");
} else {
s->arr[++(s->top)] = value;
}
}
1
Assignment No.3
char pop(struct Stack *s) {
if (isEmpty(s)) {
printf("Stack underflow!\n");
return -1;
} else {
return s->arr[(s->top)--];
}
}
char peek(struct Stack *s) {
if (isEmpty(s)) {
return -1;
} else {
return s->arr[s->top];
}
}
int precedence(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '^':
return 3;
default:
return 0;
}
}
2
Assignment No.3
int isOperator(char ch) {
return ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '^';
}
void infixToPostfix(char *infix, char *postfix) {
struct Stack stack;
init(&stack);
int i = 0, j = 0;
while (infix[i] != '\0') {
char token = infix[i];
if (isalnum(token)) {
postfix[j++] = token;
}
else if (token == '(') {
push(&stack, token);
}
else if (token == ')') {
while (!isEmpty(&stack) && peek(&stack) != '(') {
postfix[j++] = pop(&stack);
}
pop(&stack); // Discard the '('
}
else if (isOperator(token)) {
while (!isEmpty(&stack) && precedence(peek(&stack)) >=
precedence(token)) {
postfix[j++] = pop(&stack);
}
push(&stack, token);
}
i++;
3
Assignment No.3
while (!isEmpty(&stack)) {
postfix[j++] = pop(&stack);
}
postfix[j] = '\0';
}
int main() {
char infix[MAX], postfix[MAX];
printf("Enter an infix expression: ");
scanf("%s", infix);
infixToPostfix(infix, postfix);
printf("Postfix expression: %s\n", postfix);
return 0;
}
OUTPUT –