0% found this document useful (0 votes)
51 views10 pages

Name:: Muhammad Usman Roll No:: 6519 Class:: Mcs Eve 2 Data Structure Assignment

The document contains code snippets and questions related to data structures. There are examples provided for evaluating postfix expressions, converting infix to postfix expressions, converting infix to prefix expressions, and converting postfix to infix expressions. The code snippets provide functions with explanations of the logic used to perform these conversions between expression notations.

Uploaded by

Muhammad Usman
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views10 pages

Name:: Muhammad Usman Roll No:: 6519 Class:: Mcs Eve 2 Data Structure Assignment

The document contains code snippets and questions related to data structures. There are examples provided for evaluating postfix expressions, converting infix to postfix expressions, converting infix to prefix expressions, and converting postfix to infix expressions. The code snippets provide functions with explanations of the logic used to perform these conversions between expression notations.

Uploaded by

Muhammad Usman
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 10

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;

You might also like