Name:: Muhammad Usman
Roll no:: 6519
Class:: Mcs eve 2
Data structure Assignment
Q:Evaluate postfix expression?
#include <iostream>
#include <stack>
using namespace std;
// Function to evaluate given postfix expression
int postfixEval(string exp)
// create an empty stack
stack<int> stack;
// traverse the given expression
for (int i = 0; i < exp.length(); i++)
// if current char is an operand, push it to the stack
if (exp[i] >= '0' && exp[i] <= '9') {
stack.push(exp[i] - '0');
// if current char is an operator
else
// pop top two elements from the stack
int x = stack.top();
stack.pop();
// if (stack.empty())
int y = stack.top();
stack.pop();
// evaluate the expression x op y, and push the
// result back to the stack
if(exp[i] == '+')
stack.push(y + x);
else if(exp[i] == '-')
stack.push(y - x);
else if(exp[i] == '*')
stack.push(y * x);
else if(exp[i] == '/')
stack.push(y / x);
// At this point, the stack is left with only one element
// i.e. expression result
return stack.top();
int main()
string exp;
cout<<"enter any postfix expreesion "<<endl;
cin>>exp;
cout << postfixEval(exp);
return 0;
Q:Convert Infix to postfix?
#include<iostream>
#include<stack>
using namespace std;
void Postfix(char *a)
{ stack <char> s;
char output[50],t;
for(int i=0;a[i]!='\0';i++)
{ char ch = a[i];
switch(ch)
case '^':
case '-':
case '+':
case '/':
case '*': s.push(ch);
break;
case ')': t=s.top();
s.pop();
cout<<t;
break;
if (isalpha(ch))
cout<<ch;
int main()
char a[15];
cout<<"enter any infix expression"<<endl;
for(int i=0;i<15;i++)
{
cin>>a[i];
Postfix(a);
return 0;
Q:Convert Infix to prefix?
#include <iostream>
#include<stack>
using namespace std;
// Function to check if given character is
// an operator or not.
bool isOperator(char c)
return (!isalpha(c) && !isdigit(c));
// Function to find priority of given
// operator.
int getPriority(char C)
if (C == '-' || C == '+')
return 1;
else if (C == '*' || C == '/')
return 2;
else if (C == '^')
return 3;
return 0;
// Function that converts infix
// expression to prefix expression.
string infixToPrefix(string infix)
// stack for operators.
stack<char> operators;
// stack for operands.
stack<string> operands;
for (int i = 0; i < infix.length(); i++) {
// If current character is an
// opening bracket, then
// push into the operators stack.
if (infix[i] == '(') {
operators.push(infix[i]);
// If current character is a
// closing bracket, then pop from
// both stacks and push result
// in operands stack until
// matching opening bracket is
// not found.
else if (infix[i] == ')') {
while (!operators.empty() &&
operators.top() != '(') {
// operand 1
string op1 = operands.top();
operands.pop();
// operand 2
string op2 = operands.top();
operands.pop();
// operator
char op = operators.top();
operators.pop();
// Add operands and operator
// in form operator +
// operand1 + operand2.
string tmp = op + op2 + op1;
operands.push(tmp);
// Pop opening bracket from
// stack.
operators.pop();
// If current character is an
// operand then push it into
// operands stack.
else if (!isOperator(infix[i])) {
operands.push(string(1, infix[i]));
// If current character is an
// operator, then push it into
// operators stack after popping
// high priority operators from
// operators stack and pushing
// result in operands stack.
else {
while (!operators.empty() &&
getPriority(infix[i]) <=
getPriority(operators.top())) {
string op1 = operands.top();
operands.pop();
string op2 = operands.top();
operands.pop();
char op = operators.top();
operators.pop();
string tmp = op + op2 + op1;
operands.push(tmp);
}
operators.push(infix[i]);
// Pop operators from operators stack
// until it is empty and add result
// of each pop operation in
// operands stack.
while (!operators.empty()) {
string op1 = operands.top();
operands.pop();
string op2 = operands.top();
operands.pop();
char op = operators.top();
operators.pop();
string tmp = op + op2 + op1;
operands.push(tmp);
// Final prefix expression is
// present in operands stack.
return operands.top();
// Driver code
int main()
{
string s = "(A-B/C)*(A/K-L)";
cout << infixToPrefix(s);
return 0;
}}
Q:convert postfix to Infix?
#include <bits/stdc++.h>
using namespace std;
bool isOperand(char x)
return (x >= 'a' && x <= 'z') ||
(x >= 'A' && x <= 'Z');
// Get Infix for a given postfix
// expression
string getInfix(string exp)
stack<string> s;
for (int i=0; exp[i]!='\0'; i++)
{
// Push operands
if (isOperand(exp[i]))
{
string op(1, exp[i]);
s.push(op);
}
// We assume that input is
// a valid postfix and expect
// an operator.
else
{
string op1 = s.top();
s.pop();
string op2 = s.top();
s.pop();
s.push("(" + op2 + exp[i] +
op1 + ")");
}
}
// There must be a single element
// in stack now which is the required
// infix.
return s.top();
// Driver code
int main()
string exp = "ab*c+";
cout << getInfix(exp);
return 0;