Upload files to "DS/C/Lab/Week6"

This commit is contained in:
Aadit Agrawal 2024-09-03 11:27:33 +05:30
parent 5b8ed261ff
commit 8de2a08e83
3 changed files with 132 additions and 75 deletions

View file

@ -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;
}