Rotate image (square matrix) by 90 deg
Tue, 06 May 2025
Given an arithmetic expression in in-fix notation. Write code to convert that to the corresponding post-fix notation.
For example:
Infix Postfix
------ --------
a+b ab+
(a+b)*c ab+c*
a+b*c abc*+
a*(b+c)-d/e abc+*de/-
Algorithm:
Infix Expression: A * (B + C) - D / E






Code:
For simplicity of implementation, I assume that expression has only three things:
In this code we use the implementation of Stack from this post. Please read it before proceeding further.
Then we are using two helper function, one to check if the given character is operand or not and second to return the precedence of a given operator.
/*
* operand can be a single alphabete only.
*/
bool isOperand(char ch)
{
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}
/*
* return the precedence of an operator. Numbers are just to use precedence for relative purpose.
*/
int operatorPrecedence(char ch)
{
switch (ch)
{
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '^':
return 3;
}
return -1;
}
Below is the function that does the actual operation. It just print the postfix expression and
/*
* This function uses Stack data structure. Returns -1 if the expression is invalid
*/
int infixToPostfix(char* expression)
{
int i, k;
MyStack stack;
// read each character of the expression (which is either operator, operand or parenthesis
for (i = 0, k = -1; expression[i]; ++i)
{
if (isOperand(expression[i]))
{
expression[++k] = expression[i];
}
else if (expression[i] == '(')
{
stack.push(expression[i]);
}
else if (expression[i] == ')')
{
while (!stack.isEmpty() && stack.getTop() != '(')
expression[++k] = stack.pop();
if (!stack.isEmpty() && stack.getTop() != '(')
return FAILOUR;
else
stack.pop();
}
else // an operator is encountered
{
while (!stack.isEmpty() && operatorPrecedence(expression[i]) <= operatorPrecedence(stack.getTop()))
expression[++k] = stack.pop();
stack.push(expression[i]);
}
}
// All remaining elements in the stack are operators.
// pop them all out
while (!stack.isEmpty())
expression[++k] = stack.pop();
expression[++k] = '\0';
cout<<expression ;
return SUCCESS;
}
Tue, 06 May 2025
Tue, 06 May 2025
Tue, 06 May 2025
Leave a comment