Evaluate postfix expression using stack in c#
Csharp program for Evaluate postfix expression using stack. Here more information.
// Include namespace system
using System;
/*
Csharp program for
Evaluate postfix expression
*/
// Stack Node
public class StackNode
{
public int operand;
public StackNode next;
public StackNode(int operand, StackNode top)
{
this.operand = operand;
this.next = top;
}
}
public class MyStack
{
public StackNode top;
public int count;
public MyStack()
{
this.top = null;
this.count = 0;
}
// Returns the number of element in stack
public int isSize()
{
return this.count;
}
public bool isEmpty()
{
if (this.isSize() > 0)
{
return false;
}
else
{
return true;
}
}
// Add a new element in stack
public void push(int value)
{
// Make a new stack node
// And set as top
this.top = new StackNode(value, this.top);
// Increase node value
this.count++;
}
// Remove a top element
public int pop()
{
var value = this.peek();
if (this.isEmpty() == false)
{
this.top = this.top.next;
// Reduce the size
this.count--;
}
return value;
}
// Used to get top element of stack
public int peek()
{
if (!this.isEmpty())
{
return this.top.operand;
}
else
{
return 0;
}
}
}
public class Execution
{
public void evaluate(String e)
{
// Get the length of expression
var size = e.Length;
var a = 0;
var b = 0;
var s = new MyStack();
var isVaild = true;
// work with (+,-,/,*,%) operator
for (var i = 0; i < size && isVaild; i++)
{
if (e[i] >= '0' && e[i] <= '9')
{
a = (int)(e[i]) - (int)('0');
s.push(a);
}
else if (s.isSize() > 1)
{
a = s.pop();
b = s.pop();
// Perform arithmetic operations between 2 operands
if (e[i] == '+')
{
s.push(b + a);
}
else if (e[i] == '-')
{
s.push(b - a);
}
else if (e[i] == '*')
{
s.push(b * a);
}
else if (e[i] == '/')
{
s.push((int)(b / a));
}
else if (e[i] == '%')
{
s.push(b % a);
}
else
{
// When use other operator
isVaild = false;
}
}
else if (s.isSize() == 1)
{
// Special case
// When use +, - at the beginning
if (e[i] == '-')
{
a = s.pop();
s.push(-a);
}
else if (e[i] != '+')
{
// When not use +,-
isVaild = false;
}
}
else
{
isVaild = false;
}
}
if (isVaild == false)
{
// Possible case use other operators
// 1) When using special operators
// 2) Or expression is invalid
Console.WriteLine(e + " Invalid expression ");
return;
}
Console.WriteLine(e + " = " + s.pop());
}
public static void Main(String[] args)
{
var task = new Execution();
// Execute the following expression
// (1+2)*(3+5)
task.evaluate("12+35+*");
// -((7*2) + (6/2) + 4)
task.evaluate("72*62/+4+-");
}
}
Output
12+35+* = 24
72*62/+4+- = -21
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment