From 8de2a08e83a5edc273309dbd5ff8cacb389ce181 Mon Sep 17 00:00:00 2001 From: Aadit Agrawal Date: Tue, 3 Sep 2024 11:27:33 +0530 Subject: [PATCH] Upload files to "DS/C/Lab/Week6" --- DS/C/Lab/Week6/InfixToPrefix.c | 87 ++++++++++++++++++++++------------ DS/C/Lab/Week6/PrefixCheck.c | 75 ++++++++++++++++++----------- DS/C/Lab/Week6/PrefixToInfix.c | 45 +++++++++++------- 3 files changed, 132 insertions(+), 75 deletions(-) diff --git a/DS/C/Lab/Week6/InfixToPrefix.c b/DS/C/Lab/Week6/InfixToPrefix.c index a1a2909..9532612 100644 --- a/DS/C/Lab/Week6/InfixToPrefix.c +++ b/DS/C/Lab/Week6/InfixToPrefix.c @@ -6,85 +6,110 @@ 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 reverse(char *str) { +void reverse(char *str) +{ int len = strlen(str); int i, j; char temp; - for (i = 0, j = len - 1; i < j; i++, j--) { + for (i = 0, j = len - 1; i < j; i++, j--) + { temp = str[i]; str[i] = str[j]; str[j] = temp; } } -int isalnum(char c) { +int isalnum(char c) +{ return ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); } -void infixToPrefix(char infix[], char prefix[]) { +void infixToPrefix(char infix[], char prefix[]) +{ char symbol, temp[2]; int i, j = 0; - + reverse(infix); - - for (i = 0; infix[i] != '\0'; i++) { + + for (i = 0; infix[i] != '\0'; i++) + { symbol = infix[i]; - if (isalnum(symbol)) { + if (isalnum(symbol)) + { prefix[j++] = symbol; - } else if (symbol == ')') { + } + else if (symbol == ')') + { push(symbol); - } else if (symbol == '(') { - while ((temp[0] = pop()) != ')') { + } + else if (symbol == '(') + { + while ((temp[0] = pop()) != ')') + { prefix[j++] = temp[0]; } - } else { - while (top > -1 && precedence(stack[top]) > precedence(symbol)) { + } + else + { + while (top > -1 && precedence(stack[top]) > precedence(symbol)) + { prefix[j++] = pop(); } push(symbol); } } - - while (top > -1) { + + while (top > -1) + { prefix[j++] = pop(); } prefix[j] = '\0'; - + reverse(prefix); } -int main() { +int main() +{ char infix[MAX_SIZE], prefix[MAX_SIZE]; printf("Enter infix expression: "); - fgets(infix, MAX_SIZE, stdin); - infix[strcspn(infix, "\n")] = 0; // Remove newline if present + gets(infix); infixToPrefix(infix, prefix); printf("Prefix expression: %s\n", prefix); return 0; diff --git a/DS/C/Lab/Week6/PrefixCheck.c b/DS/C/Lab/Week6/PrefixCheck.c index dc34168..f604133 100644 --- a/DS/C/Lab/Week6/PrefixCheck.c +++ b/DS/C/Lab/Week6/PrefixCheck.c @@ -6,65 +6,86 @@ 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 stack[top--]; } -int isOperator(char c) { +int isOperator(char c) +{ return (c == '+' || c == '-' || c == '*' || c == '/'); } -int isDigit(char c) { +int isDigit(char c) +{ return (c >= '0' && c <= '9'); } -int evaluatePrefix(char* expr) { +int evaluatePrefix(char *expr) +{ int len = strlen(expr); - for (int i = len - 1; i >= 0; i--) { - if (isDigit(expr[i])) { + for (int i = len - 1; i >= 0; i--) + { + if (isDigit(expr[i])) + { push(expr[i] - '0'); - } else if (isOperator(expr[i])) { + } + else if (isOperator(expr[i])) + { int operand1 = pop(); int operand2 = pop(); - switch (expr[i]) { - case '+': push(operand1 + operand2); break; - case '-': push(operand1 - operand2); break; - case '*': push(operand1 * operand2); break; - case '/': - if (operand2 != 0) push(operand1 / operand2); - else { - printf("Error: Division by zero\n"); - return -1; - } - break; + switch (expr[i]) + { + case '+': + push(operand1 + operand2); + break; + case '-': + push(operand1 - operand2); + break; + case '*': + push(operand1 * operand2); + break; + case '/': + if (operand2 != 0) + push(operand1 / operand2); + else + { + printf("Error: Division by zero\n"); + return -1; + } + break; } } } return pop(); } -int main() { +int main() +{ char expr[MAX_SIZE]; printf("Enter prefix expression: "); - fgets(expr, MAX_SIZE, stdin); - expr[strcspn(expr, "\n")] = 0; // Remove newline if present - + gets(expr); + int result = evaluatePrefix(expr); - 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/Week6/PrefixToInfix.c b/DS/C/Lab/Week6/PrefixToInfix.c index a6a49a9..da3b5ff 100644 --- a/DS/C/Lab/Week6/PrefixToInfix.c +++ b/DS/C/Lab/Week6/PrefixToInfix.c @@ -6,40 +6,51 @@ char stack[MAX_SIZE][MAX_SIZE]; int top = -1; -void push(const char* item) { - if (top >= MAX_SIZE - 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) { +char *pop() +{ + if (top < 0) + { printf("Stack Underflow\n"); return NULL; } return stack[top--]; } -int isOperator(char c) { +int isOperator(char c) +{ return (c == '+' || c == '-' || c == '*' || c == '/'); } -int isAlphanumeric(char c) { +int isAlphanumeric(char c) +{ return ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); } -void prefixToInfix(char* prefix) { +void prefixToInfix(char *prefix) +{ int len = strlen(prefix); char temp[MAX_SIZE]; - - for (int i = len - 1; i >= 0; i--) { - if (isAlphanumeric(prefix[i])) { + + for (int i = len - 1; i >= 0; i--) + { + if (isAlphanumeric(prefix[i])) + { temp[0] = prefix[i]; temp[1] = '\0'; push(temp); - } else if (isOperator(prefix[i])) { + } + else if (isOperator(prefix[i])) + { char op1[MAX_SIZE], op2[MAX_SIZE], result[MAX_SIZE]; strcpy(op1, pop()); strcpy(op2, pop()); @@ -47,17 +58,17 @@ void prefixToInfix(char* prefix) { push(result); } } - + printf("Infix expression: %s\n", stack[top]); } -int main() { +int main() +{ char prefix[MAX_SIZE]; printf("Enter prefix expression: "); - fgets(prefix, MAX_SIZE, stdin); - prefix[strcspn(prefix, "\n")] = 0; // Remove newline if present - + gets(prefix); + prefixToInfix(prefix); - + return 0; } \ No newline at end of file