Title here
Summary here
#include <ctype.h>
to get the isalnum()
function to check alphabets and numbers which returns false for any special characters.
char stack[100]
: A fixed-size array to store operators and operands for conversion.int top = -1
: This variable points to the top of the stack.char exp[100]
: Another array to store the user input expression.char *e
: A pointer used to traverse the exp[]
array.char x
: A variable to store the element popped from the stack.stack[100]
) with top = -1
to track the top of the stack.main
function, declare the exp[100]
array to capture the user input expression. Use scanf("%s", exp)
to capture the entire expression (%c
is for single char
) (&exp
is not needed as it is an array).e
and Set e = exp
to point to the start of the expression, enabling traversal.x
in the main function to capture popped elements.while
loop (while(*e != '\0')
) to traverse the expression by incrementing pointer e++
.exp[]
and ends when the end of the array is reached which is signaled by *e == '\0'
As the while
loop runs, e
is incremented and it traverses the exp
array elements.e
points at the location within the array and *e
is element in that array location.
if ( isalnum(*e) )
If the character *e
is alphanumeric (number or letter), it is printed directly without being pushed to the stack.(
: Always pushed onto the stack.)
: Pop elements from the stack and print them until an opening parenthesis (
is encountered. while( (x=pop()) != '(' )
while ( priority(stack[top]) >= priority(*e) )
Conditions for pushing in the operator.
if (top == -1 )
then can be pushed in.stack[top]
has to be compared with the element from the expression *e
.After processing the entire expression, pop all remaining operators from the stack.
After processing the entire expression the main while
loop ends after *e
reaches \0
. There are still operators in the stack.
pop all remaining operators from the stack. while (top != -1 )
print all the popped items.
char
that has to be pushed which is in the *e
top++
, and assign the value to stack[top]
top++ ; stack[top] = x
or stack[++top]
top = -1
then return -1
to calling function. (This allows to know the end if the pop value is used in any checking)stack[top]
and then decrement top
stack[top--]
char
as parameter.while
loop to compare both operators based on their return value.0
and next would be 1, 2, 3
(
: Lowest precedence (0).+
, -
: Medium precedence (1).*
, /
: Highest precedence (2).#include <stdio.h>
#include <ctype.h>
char stack[100];
int top = -1;
char pop();
void push(char x);
int priority(char x);
int main()
{
char exp[100];
char *e, x;
printf("Enter the Infix Expression to be Converted: \n");
scanf("%s", exp);
e = exp;
while( *e != '\0' )
{
if ( isalnum(*e) )
{
print("%c \n", *e );
}
else if ( *e == '(')
{
push(*e);
}
else if ( *e == ')')
{
while ( (x = pop()) != '(' )
{
printf("%c \n", x);
}
}
else
{
while ( priority(stack[top]) >= priority(*e) )
{
printf("%c \n", pop());
}
push(*e);
}
e++;
}
while ( top != -1)
{
printf("%c \n", pop());
}
return 0;
}
void push(char x)
{
top++;
stack[top] = x;
}
char pop()
{
if (top == -1)
return -1;
else
return stack[top--];
}
int priority(char x)
{
if (x == '(')
return 0;
else if ( x == '+' || x == '-')
return 1;
else if ( x == '*' || x == '/')
return 2;
else
return 0;
}
#include <stdio.h>
#include <ctype.h>
char stack[100];
int top = -1;
char pop();
void push(char x);
int priority(char x);
int main() {
char exp[100]; // Expression to be converted
char *e, x; // Pointer to traverse the expression and variable to store popped element
printf("Enter the Infix Expression to be Converted: \n");
scanf("%s", exp); // Take input expression
e = exp; // Pointer to the start of expression
while (*e != '\0') // Loop until end of expression
{
if (isalnum(*e)) // If the character is a number/letter
{
printf("%c \n", *e); // Print the character (operand)
}
else if (*e == '(') // If opening parenthesis
{
push(*e); // Push it onto the stack
}
else if (*e == ')') // If closing parenthesis
{
while ((x = pop()) != '(') // Pop until '(' is encountered
{
printf("%c \n", x); // Print the popped operator
}
}
else // If the character is an operator
{
// Pop operators of higher or equal precedence and print them
while (priority(stack[top]) >= priority(*e))
{
printf("%c \n", pop());
}
push(*e); // Push the current operator onto the stack
}
e++; // Move to the next character in the expression
}
// After processing the expression, pop all remaining operators from the stack
while (top != -1)
{
printf("%c \n", pop()); // Print and pop the remaining operators
}
return 0;
}
// Function to push an element onto the stack
void push(char x)
{
top++; // Increment the top of the stack
stack[top] = x; // Assign the element to the stack
}
// Function to pop an element from the stack
char pop()
{
if (top == -1) // Check if the stack is empty
return -1; // Return -1 if stack is empty
else
return stack[top--]; // Return the top element and decrement top
}
// Function to return the priority of operators
int priority(char x)
{
if (x == '(') return 0; // '(' has the lowest precedence
else if (x == '+' || x == '-') return 1; // + and - have medium precedence
else if (x == '*' || x == '/') return 2; // * and / have high precedence
else return 0; // Default case for non-operators
}