diff --git a/DS/C/Lab/Week5/InfixToPostfix.c b/DS/C/Lab/Week5/InfixToPostfix.c index b543de6..6c87ad9 100644 --- a/DS/C/Lab/Week5/InfixToPostfix.c +++ b/DS/C/Lab/Week5/InfixToPostfix.c @@ -1,70 +1,91 @@ #include #include -#include #define MAX_SIZE 100 char stack[MAX_SIZE]; int top = -1; -void push(char item) { - if (top >= MAX_SIZE - 1) { +void push(char item) +{ + if (top >= MAX_SIZE - 1) + { printf("Stack Overflow\n"); return; } stack[++top] = item; } -char pop() { - if (top < 0) { +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; +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[]) { +void infixToPostfix(char infix[], char postfix[]) +{ int i, j = 0; char symbol, next; - for (i = 0; i < strlen(infix); i++) { + for (i = 0; i < strlen(infix); i++) + { symbol = infix[i]; - if (isalnum(symbol)) { + if ((symbol >= 'a' && symbol <= 'z') || (symbol >= 'A' && symbol <= 'Z') || (symbol >= '0' && symbol <= '9')) + { postfix[j++] = symbol; - } else if (symbol == '(') { + } + else if (symbol == '(') + { push(symbol); - } else if (symbol == ')') { - while ((next = pop()) != '(') { + } + else if (symbol == ')') + { + while ((next = pop()) != '(') + { postfix[j++] = next; } - } else { - while (top > -1 && precedence(stack[top]) >= precedence(symbol)) { + } + else + { + while (top > -1 && precedence(stack[top]) >= precedence(symbol)) + { postfix[j++] = pop(); } push(symbol); } } - while (top > -1) { + while (top > -1) + { postfix[j++] = pop(); } postfix[j] = '\0'; } -int main() { +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 + gets(infix); infixToPostfix(infix, postfix); printf("Postfix expression: %s\n", postfix); return 0; diff --git a/DS/C/Lab/Week5/PostfixCheck.c b/DS/C/Lab/Week5/PostfixCheck.c index 770015b..8fe9a89 100644 --- a/DS/C/Lab/Week5/PostfixCheck.c +++ b/DS/C/Lab/Week5/PostfixCheck.c @@ -6,61 +6,80 @@ int stack[MAX_SIZE]; int top = -1; -void push(int item) { - if (top >= MAX_SIZE - 1) { +void push(int item) +{ + if (top >= MAX_SIZE - 1) + { printf("Stack Overflow\n"); return; } stack[++top] = item; } -int pop() { - if (top < 0) { +int pop() +{ + if (top < 0) + { printf("Stack Underflow\n"); - return -1; // Return a sentinel value instead of exiting + return -1; } return stack[top--]; } -int isDigit(char c) { +int isDigit(char c) +{ return c >= '0' && c <= '9'; } -int evaluatePostfix(char* exp) { +int evaluatePostfix(char *exp) +{ int i, operand1, operand2, result; - - for (i = 0; exp[i] != '\0'; i++) { - if (isDigit(exp[i])) { + + for (i = 0; exp[i] != '\0'; i++) + { + if (isDigit(exp[i])) + { push(exp[i] - '0'); - } else { + } + else + { operand2 = pop(); operand1 = pop(); - switch (exp[i]) { - case '+': push(operand1 + operand2); break; - case '-': push(operand1 - operand2); break; - case '*': push(operand1 * operand2); break; - case '/': - if (operand2 == 0) { - printf("Error: Division by zero\n"); - return -1; // Return a sentinel value instead of exiting - } - push(operand1 / operand2); - break; + switch (exp[i]) + { + case '+': + push(operand1 + operand2); + break; + case '-': + push(operand1 - operand2); + break; + case '*': + push(operand1 * operand2); + break; + case '/': + if (operand2 == 0) + { + printf("Error: Division by zero\n"); + return -1; + } + push(operand1 / operand2); + break; } } } return pop(); } -int main() { +int main() +{ char exp[MAX_SIZE]; printf("Enter a postfix expression: "); - fgets(exp, MAX_SIZE, stdin); - exp[strcspn(exp, "\n")] = 0; // Remove newline if present - + gets(exp); + int result = evaluatePostfix(exp); - if (result != -1) { + if (result != -1) + { printf("Result: %d\n", result); } return 0; -} \ No newline at end of file +} diff --git a/DS/C/Lab/Week5/PostfixToInfix.c b/DS/C/Lab/Week5/PostfixToInfix.c index b207c46..e8c4f14 100644 --- a/DS/C/Lab/Week5/PostfixToInfix.c +++ b/DS/C/Lab/Week5/PostfixToInfix.c @@ -30,7 +30,7 @@ int isOperator(char 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]; @@ -43,7 +43,7 @@ void postfixToInfix(const char* postfix) { push(temp); } } - + printf("Infix expression: %s\n", stack[top]); } @@ -53,4 +53,4 @@ int main() { gets(postfix); postfixToInfix(postfix); return 0; -} \ No newline at end of file +}