Untitled
unknown
plain_text
a year ago
2.3 kB
37
Indexable
// C Program : Infix to Prefix Conversion
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 100
char stack[SIZE];
int top = -1;
void push(char c)
{
stack[++top] = c;
}
char pop()
{
return stack[top--];
}
int precedence(char c)
{
if (c == '^')
return 3;
if (c == '*' || c == '/')
return 2;
if (c == '+' || c == '-')
return 1;
return 0;
}
// Function to reverse a string
void reverse(char str[])
{
int i, j;
char temp;
for (i = 0, j = strlen(str) - 1; i < j; i++, j--)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
// Convert infix to postfix (helper function)
void infixToPostfix(char infix[], char postfix[])
{
int i, k = 0;
char ch;
for (i = 0; infix[i] != '\0'; i++)
{
ch = infix[i];
if (isalnum(ch))
{ // operand
postfix[k++] = ch;
}
else if (ch == '(')
{
push(ch);
}
else if (ch == ')')
{
while (top != -1 && stack[top] != '(')
postfix[k++] = pop();
pop(); // remove '('
}
else
{ // operator
while (top != -1 && precedence(stack[top]) >= precedence(ch))
postfix[k++] = pop();
push(ch);
}
}
while (top != -1)
postfix[k++] = pop();
postfix[k] = '\0';
}
// Infix to Prefix conversion
void infixToPrefix(char infix[], char prefix[])
{
char postfix[SIZE];
// Step 1: Reverse infix
reverse(infix);
// Step 2: Replace '(' with ')' and vice versa
for (int i = 0; infix[i] != '\0'; i++)
{
if (infix[i] == '(')
infix[i] = ')';
else if (infix[i] == ')')
infix[i] = '(';
}
// Step 3: Convert to postfix
infixToPostfix(infix, postfix);
// Step 4: Reverse postfix -> prefix
reverse(postfix);
strcpy(prefix, postfix);
}
int main()
{
char infix[SIZE], prefix[SIZE];
printf("Enter an infix expression: ");
scanf("%s", infix);
infixToPrefix(infix, prefix);
printf("Prefix Expression: %s\n", prefix);
return 0;
}
Editor is loading...
Leave a Comment