Skip to content

Commit

Permalink
Create code.c
Browse files Browse the repository at this point in the history
  • Loading branch information
Mansi-Tanwar authored Nov 2, 2024
1 parent 78260c8 commit fd97f54
Showing 1 changed file with 95 additions and 0 deletions.
95 changes: 95 additions & 0 deletions Postfix to Infix/code.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

// Define the maximum size for the stack and expression
#define MAX 100

// Stack structure to store strings (expressions)
struct Stack {
int top;
char* items[MAX];
};

// Function to initialize the stack
void initStack(struct Stack* stack) {
stack->top = -1;
}

// Function to push an item onto the stack
void push(struct Stack* stack, char* str) {
if (stack->top >= MAX - 1) {
printf("Stack overflow\n");
return;
}
stack->items[++(stack->top)] = strdup(str); // strdup duplicates the string
}

// Function to pop an item from the stack
char* pop(struct Stack* stack) {
if (stack->top == -1) {
printf("Stack underflow\n");
return NULL;
}
return stack->items[(stack->top)--];
}

// Function to check if a character is an operator
int isOperator(char ch) {
return (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '^');
}

// Function to convert a Postfix expression to Infix
void postfixToInfix(char* postfix) {
struct Stack stack;
initStack(&stack);

int length = strlen(postfix);

// Traverse the Postfix expression from left to right
for (int i = 0; i < length; i++) {
// If the character is an operand, push it onto the stack
if (isalnum(postfix[i])) {
char operand[2] = {postfix[i], '\0'}; // Create a string for the operand
push(&stack, operand);
}
// If the character is an operator
else if (isOperator(postfix[i])) {
// Pop the top two operands from the stack
char* operand1 = pop(&stack);
char* operand2 = pop(&stack);

// Create a new string: (operand2 operator operand1)
char* expression = (char*)malloc(strlen(operand1) + strlen(operand2) + 4);
sprintf(expression, "(%s%c%s)", operand2, postfix[i], operand1);

// Push the resulting expression back onto the stack
push(&stack, expression);

// Free dynamically allocated memory
free(operand1);
free(operand2);
}
}

// The final result is the remaining element in the stack
char* result = pop(&stack);
printf("Infix Expression: %s\n", result);

// Free the final result memory
free(result);
}

int main() {
char postfix[MAX];

// Input the Postfix expression
printf("Enter a Postfix expression: ");
scanf("%s", postfix);

// Convert and display the Infix expression
postfixToInfix(postfix);

return 0;
}

0 comments on commit fd97f54

Please sign in to comment.