Upload files to "DS/C/Lab/Week5"
This commit is contained in:
parent
0589cce66a
commit
0cdc830d54
4 changed files with 277 additions and 0 deletions
71
DS/C/Lab/Week5/InfixToPostfix.c
Normal file
71
DS/C/Lab/Week5/InfixToPostfix.c
Normal file
|
@ -0,0 +1,71 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#define MAX_SIZE 100
|
||||
|
||||
char stack[MAX_SIZE];
|
||||
int top = -1;
|
||||
|
||||
void push(char item) {
|
||||
if (top >= MAX_SIZE - 1) {
|
||||
printf("Stack Overflow\n");
|
||||
return;
|
||||
}
|
||||
stack[++top] = item;
|
||||
}
|
||||
|
||||
char pop() {
|
||||
if (top < 0) {
|
||||
printf("Stack Underflow\n");
|
||||
return -1;
|
||||
}
|
||||
return stack[top--];
|
||||
}
|
||||
|
||||
int precedence(char symbol) {
|
||||
switch (symbol) {
|
||||
case '^': return 3;
|
||||
case '*':
|
||||
case '/': return 2;
|
||||
case '+':
|
||||
case '-': return 1;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void infixToPostfix(char infix[], char postfix[]) {
|
||||
int i, j = 0;
|
||||
char symbol, next;
|
||||
for (i = 0; i < strlen(infix); i++) {
|
||||
symbol = infix[i];
|
||||
if (isalnum(symbol)) {
|
||||
postfix[j++] = symbol;
|
||||
} else if (symbol == '(') {
|
||||
push(symbol);
|
||||
} else if (symbol == ')') {
|
||||
while ((next = pop()) != '(') {
|
||||
postfix[j++] = next;
|
||||
}
|
||||
} else {
|
||||
while (top > -1 && precedence(stack[top]) >= precedence(symbol)) {
|
||||
postfix[j++] = pop();
|
||||
}
|
||||
push(symbol);
|
||||
}
|
||||
}
|
||||
while (top > -1) {
|
||||
postfix[j++] = pop();
|
||||
}
|
||||
postfix[j] = '\0';
|
||||
}
|
||||
|
||||
int main() {
|
||||
char infix[MAX_SIZE], postfix[MAX_SIZE];
|
||||
printf("Enter infix expression: ");
|
||||
fgets(infix, MAX_SIZE, stdin);
|
||||
infix[strcspn(infix, "\n")] = 0; // Remove newline if present
|
||||
infixToPostfix(infix, postfix);
|
||||
printf("Postfix expression: %s\n", postfix);
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue