Professional Documents
Culture Documents
com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
6. Overloading unary and binary operator using Member function and Non-member function
7. Class and Function template
a) Function Template
Displaying greatest value using function template
b) Class Template
Displaying greatest number using class template.
8. Exception Handling
a) Division by zero
b) Division by zero using function
c) User defined exception handling
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
d) Out of range Exceptions
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
11) Application of Stack & Queue
www.rejinpaul.com
a) Stack Implementation
b) Queue Implementation
c) Infix to Postfix Conversion:
d) Evaluation of Postfix Expression
e) Circular Queue Application of queue
12) Implementation of Binary search tree
13. Implementation of Tree Traversal
14. Minimum Spanning Tree
a) Prim's Algorithm
b) Kruskal Algorithm
15. Shortest Path Algorithm
a) Dijkstra's Algorithm
b) Bellman Ford Algorithm
c) Floyds Warshall Algorithm
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
#include<iostream>
#include<string.h>
using namespace std;
//class name
class StudentDetails
{
//access specifier
private:
//declaration of member variables
int mStudentmarks;
char mStudentgrade;
char* pStudentname;
int mName;
public:
//default constructor
StudentDetails ()
{
}
//parameterized constructor
StudentDetails (int student_mark, char student_grade)
{
mStudentmarks = student_mark;
mStudentgrade = student_grade;
}
//copy constructor
StudentDetails (StudentDetails & oStudent)
{
www.rejinpaul.com
mStudentmarks = oStudent.mStudentmarks;
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
mStudentgrade = oStudent.mStudentgrade;
}
//dynamic constructor
StudentDetails (char* pStudent)
{
mName = strlen(pStudent);
pStudentname = new char[mName+1];
strcpy(pStudentname,pStudent);
}
//member function
void StudentName()
{
oStudent1(730,
www.rejinpaul.com
'A'),oStudent2(621,'B'),oHighestMark(oStudent1);
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
oNameStudent1(first);
oNameStudent1.StudentName();
oStudent1.StudentMark();
cout << "Record of student 2:" << endl;
StudentDetails
oNameStudent2(second);
oNameStudent2.StudentName();
oStudent2.StudentMark();
cout << " highest marks and grade of the class \n";
oHighestMark.StudentMark();
}
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
}
// Function two
int subtraction(friends input)
{
// subtraction operation performed
return int(input.mVar2- input.mVar1);
}
// main function
int main( )
{
// object created
friends ofriend;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
#include <iostream>
using namespace std;
class Square;
class Rectangle
{
int width, height;
public:
int area ()
{
return ( width * height );
}
void convert ( Square a );
};
class Square
{
friend class Rectangle;
private:
int side;
public:
Square ( int a ) : side ( a ) {}
};
void Rectangle::convert ( Square a )
{
width = a.side;
height = a.side;
}
int main ()
{
Rectangle rect;
Square sqr ( 4 );
rect.convert ( sqr );
cout << rect.area();
return 0;
}
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
a) Single Inheritance
#include<iostream>
using namespace std;
//Base class Employee
class Employee
{
public:
int mEmployee_number;
char mEmployee_name[20], mEmployee_destination[20];
void Getdetails1()
{
cout << "Enter the Employee number:";
cin >> mEmployee_number;
cout << "Enter the Employee name:";
cin >> mEmployee_name;
cout << "Enter the designation:";
cin >> mEmployee_destination;
}
};
//Derived Class salary from Employee
class salary: public Employee
{
float B_pay, HR_Allowance, D_Allowance, P_Fund, Netpay;
public:
void Getdetails2()
{
cout << "Enter the basic pay:";
cin >> B_pay;
cout << "Enter the Humen Resource Allowance:";
cin >> HR_Allowance;
cout << "Enter the Dearness Allowance :";
cin >> D_Allowance;
cout << "Enter the Profitablity Fund:";
cin >> P_Fund;
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
void calculate()
{
Netpay = B_pay + HR_Allowance + D_Allowance - P_Fund;
}
void display()
{
cout << mEmployee_number << "\t" << mEmployee_name << "\t" <<
mEmployee_destination << "\t" << B_pay << "\t" << HR_Allowance << "\t" <<
D_Allowance << "\t" << P_Fund << "\t" << Netpay << "\n";
}
};
int main()
{
int Var_i, Var_n;
char Var_ch;
salary Var_s[10];
cout << "Enter the number of Employee:";
cin >> Var_n;
for ( i = 0;i < n;i++ )
{
Var_s[Var_i].Getdetails1();
Var_s[Var_i].Getdetails2();
Var_s[Var_i].calculate();
}
cout << "\n number
name destination
B_pay
HR_Allowance
D_Allowance
P_Fund Netpay ";
for ( Var_i = 0;Var_i < Var_n;Var_i++ )
{
Var_s[Var_i].display();
}
}
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
b) Multiple Inheritance
#include <iostream>
using namespace std;
//base class1
class Area
{
public:
float area_calculate ( float l, float b )
{
return l*b;
}
};
//base class2
class Perimeter
{
public:
float peri_calculate ( float l, float b )
{
return 2* ( l + b );
}
};
/* Rectangle class is derived from classes Area and Perimeter. */
class Rectangle : private Area, private Perimeter
{
private:
float length, breadth;
public:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
float area_calc()
{
/* Calls area_calc() of class Area and returns it. */
return Area::area_calculate ( length, breadth );
}
float peri_calc()
{
/* Calls peri_calc() function of class Perimeter and returns it. */
return Perimeter::peri_calculate ( length, breadth );
}
};
int main()
{
//object created
Rectangle oRectangle;
oRectangle.get_data();
cout << "Area = " << oRectangle.area_calculate();
cout << "\n Perimeter = " << oRectangle.peri_calculate();
return 0;
}
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
#include<iostream>
using namespace std;
//base class
class top
{
public :
int a;
void getdata()
{
cout << "\n\nEnter the Value :\t";
cin >> a;
}
};
//First level inheritance
// class middle is derived_1
class middle : public top
{
public:
int b;
void square()
{
getdata();
b = a * a;
cout << "\n\nSquare Is :" << b;
}
};
//Second level inheritance
// class bottom is derived_2
class bottom : public middle
{
public:
int c;
void cube()
{
square();
c = b * a;
cout << "\n\nCube :\t" << c;
}
};
int main()
{
bottom b1;
b1.cube();
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
Output
d) Hybrid Inheritance
#include<iostream>
#include<string.h>
using namespace std;
//base class name
class StudentResult
{
int mStud_Rollno;
public:
//member function of base class
void GetRollnumber()
{
cout << "Enter Roll No:";
cin >> mStud_Rollno;
}
//member function of base class
void PutRollnumber()
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
PutSportsscore();
// object created for only one class ( finally which was derived)
Result oStudentResult;
oStudentResult.GetRollnumber();
oStudentResult.GetSubjectmarks();
oStudentResult.GetSportsscore();
oStudentResult.mDisplay();
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
//class
class Shape
{
protected:
//member variable
double mLength;
double mBreath;
public:
//Member function
void Getdata(double mLength1,double mBreath1)
{
mLength=mLength1;
mBreath=mBreath1;
}
virtual void display()
{
}
};
//Derived class 1
class triangle:public Shape
{
double Var_T;
public:
void display()
{
Var_T=0.5*mLength*mBreath;
cout<<"\nArea of the triangle :";
cout<<Var_T;
}
};
//Derived class 2
class rectangle:public Shape
{
double Var_R;
public:
void display()
{
Var_R=mLength*mBreath;
cout<<"\nArea of rectangle :";
cout<<Var_R;
}
};
//derived class 3
class circle:public Shape
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
{
double Var_C;
public:
void display()
{
Var_C=3.14*mLength*mLength;
cout<<"\nArea of the circle :";
cout<<Var_C;
}
};
int main()
{
double Breath,Height;
triangle oTriangle;
rectangle oRectangle;
circle oCircle;
cout<<"\n Enter two values for area calculation:";
cin>>Breath>>Height;
oTriangle.Getdata(Breath,Height);
oRectangle.Getdata(Breath,Height);
oCircle.Getdata(Breath,0);
oTriangle.display();
oRectangle.display();
oCircle.display();
}
Output
b) Function Overloading
#include <iostream>
using namespace std;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
//class
class PrintData
{
public:
//member function to get integer value
void Print(int mIntValue)
{
cout << "Printing int: " << mIntValue << endl;
}
//member function to get double value
void Print(double mDoubnleValue)
{
cout << "Printing float: " << mDoubnleValue << endl;
}
//member function to get character
void Print(char* mCharacterValue)
{
cout << "Printing character: " << mCharacterValue << endl;
}
};
int main(void)
{
PrintData oPrintData;
// Call print to print integer
oPrintData.Print(5);
// Call print to print float
oPrintData.Print(500.263);
// Call print to print character
oPrintData.Print("Hello C++");
return 0;
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
public:
void area()
{
mResult =
}
};
www.rejinpaul.com
mWidth*mHeight;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
{
mRealnumber = real;
mImaginarynumber = imaginary;
}
<<
>>
<<
>>
"Real Part:";
oComplex.mRealnumber;
"Imaginary Part:";
oComplex.mImaginarynumber;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
return input;
}
ostream& operator
<<
<<
<<
"+"
else
output << oComplex.mRealnumber
<<
oComplex.mImaginarynumber <<
"i";
return output;
}
// Defining member function
ComplexOperations ComplexOperations::operator+ ( ComplexOperations oComplex)
{
ComplexOperations oAddition;
oAddition.mRealnumber = mRealnumber +
oComplex.mRealnumber;
oAddition.mImaginarynumber = mImaginarynumber +
oComplex.mImaginarynumber;
return oAddition;
}
ComplexOperations ComplexOperations::operator-(ComplexOperations oComplex
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
ComplexOperations oSubtraction;
oComplex.mImaginarynumber;
oMulti.mImaginarynumber = mRealnumber
mImaginarynumber
oComplex.mImaginarynumber
oComplex.mRealnumber;
return oMulti;
}
ComplexOperations ComplexOperations::operator/ ( ComplexOperations oComplex )
{
ComplexOperations oDivision;
float result_of_complexoperations;
result_of_complexoperations
oComplex.mRealnumber
oComplex.mRealnumber
oComplex.mImaginarynumber
oComplex.mImaginarynumber;
oDivision.mRealnumber
mImaginarynumber
( mRealnumber
oComplex.mRealnumber
oComplex.mImaginarynumber )/result_of_complexoperations;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
oComplex.mImaginarynumber )/result_of_complexoperations;
oDivision.mImaginarynumber
-
mRealnumber
( mImaginarynumber
oComplex.mRealnumber
return oDivision;
}
int main()
{
ComplexOperations oNumberOne, oNumberTwo, oNumberThree;
cout
cin
cout
cin
<<
>>
<<
>>
cout
<<
cout
<<
"1st:"
cout
<<
"\n2nd:"
<<
oNumberOne;
<<
oNumberTwo;
oNumberThree = oNumberOne
cout
<<
"\nAddition is:"
<<
oNumberThree = oNumberOne
cout
<<
<<
<<
oNumberTwo
return 0;
oNumberThree;
oNumberTwo;
oNumberThree = oNumberOne
cout
oNumberThree;
oNumberThree = oNumberOne
cout
oNumberTwo;
<<
oNumberThree;
oNumberTwo
<<
oNumberThree;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
}
Output
number_two
number_one;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
{
// Integer variables declaration
int int_number_one, int_number_two;
// Double variables declaration
<<
>>
>>
int_number_two;
<<
"Integer Result:"
cout
<<
cin
>>
<<
Max(int_number_one,
double_number_one
>>
double_number_two;
<<
Max(double_number_one, double_number_two);
cout
<<
"Double Result:"
cout
<<
cin
>>
cout
<<
int_number_two);
string_word_one
"String Result:"
>>
string_word_two;
<<
Max(string_word_one, string_word_two);
return 0;
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
b) Class Template
www.rejinpaul.com
mNumbertwo=second;
}
// Function call
T GetMax ();
};
// Class template declaration
template <class T>
T GreatestNumber<T>::GetMax ()
{
T mReturnvalue;
mReturnvalue = mNumberone > mNumbertwo ? mNumberone : mNumbertwo;
return mReturnvalue;
}
/*
Main function which takes the number_one and number_two
as input and print the greatest of two numbers using
function template.
*/
int main ()
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
{
int number_one, number_two;
www.rejinpaul.com
8. Exception Handling
a) Division by zero
#include<iostream>
using namespace std;
int main()
{
// Integer variables declaration
int number_one,number_two,number_three;
// Floating variables declaration
float number_four;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
int main ()
{
//Integer variables declaration
int int_Numberone,int_Numbertwo;
// Dobule variable initialized with zero
double double_Numberone = 0;
cout << "Enter the integer values";
cin >> int_Numberone >> int_Numbertwo;
//try function
try
{
// Function Call to division()
double_Numberone = Division(int_Numberone, int_Numbertwo);
cout << double_Numberone << endl;
}
// catch function
catch (const char* divisionvalue )
{
// Print the error statement of division
cerr << divisionvalue << endl;
}
return 0;
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
using namespace std;
int main()
{
int StudentAge;
www.rejinpaul.com
try
{
cout << "Student Age: ";
cin >> StudentAge;
/*Check whether the student age is greater than zero */
if ( StudentAge < 0 )
throw "Positive Number Required";
// Print the student age
cout << "\n Student Age: " << StudentAge << "\n\n";
}
// Catch the "Positive Number Required" exception.
catch ( const char* Message )
{
cout << "Error: " << Message;
}
cout << "\n";
return 0;
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
ranges 0 - 100
to avoid
try
{
float average = calculateAverage ( mark1, mark2, mark3, mark4 );
cout << "Average of four marks\n" << average;
}
catch ( OutOfRangeException )
{
cout << "Exception occurred (**) OutOfRangeException**)\n";
cerr << "Marks out of range" << endl;
}
// system("pause");
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
char Operator;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
break;
case '*':
Result = Operand1 * Operand2;
break;
www.rejinpaul.com
case '/':
Result = Operand1 / Operand2;
break;
}
// Display the result of the operation
cout << "\n" << Operand1 << " " << Operator << " "
<< Operand2 << " = " << Result << "\n\n";
}
catch (const int n)
{
cout << "\n Bad Operation: Division by " << n << " not allowed\n\n";
}
catch (const char n)
{
cout << "\n Operation Error: " << n << " is not a valid operator\n\n";
}
catch (const char *BadOperand)
{
cout << "\n Error: " << BadOperand << " is not a valid number\n\n";
}
return 0;
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
9. STL Concepts
www.rejinpaul.com
a) Container
STL Container-vector operators
#include <vector>
#include <iostream>
using namespace std;
int main ()
{
unsigned int i;
// vector container for integer elements
vector<int> vec1, vec2, vec3;
int size_one, size_two, size_three;
cout << "Enter the size for three vectors";
cin >> size_one >> size_two >> size_three;
// print vector data
cout << "vec1 vector data: ";
// append elements with given values
for ( i = 1; i <= size_one; ++i )
vec1.push_back ( i );
// print all elements separated by a space
for ( i = 0; i < vec1.size(); ++i )
cout << vec1[i] << ' ';
cout << endl;
cout << "vec2 vector data: ";
// append elements with given values
for ( i = 1; i <= size_two; ++i )
vec2.push_back ( i );
// print all elements separated by a space
for ( i = 0; i < vec2.size(); ++i )
cout << vec2[i] << ' ';
cout << endl;
cout << "vec3 vector data: ";
// append elements with given values
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
for ( i = 1; i <= size_three; ++i )
vec3.push_back ( i );
www.rejinpaul.com
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
cout << "vec1 vector less or equal than vec2 vector." << endl;
else
cout << "vec1 vector is not less or equal than vec2 vector." << endl;
return 0;
}
Output
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
cout << "The number of elements in vector_two = " << vector_two.size() <<
endl;
cout << endl;
return 0;
}
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
string str1[100];
size():
<< endl;
int position;
string new_string;
cout << "Enter the position to insert the new string";
cin >> position;
cout << "Enter the new string";
cin >> new_string;
// insert element "always" before element "?"
sentence.insert ( find ( sentence.begin(), sentence.end(),
sentence[position-1] ),
new_string );
// assign "!" to the last element
sentence.back() = "!";
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
size():
<< endl;
b) Allocator
#include <iostream>
#include <algorithm>
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
#include <string>
class Account
{
private :
std::string owner_name;
int credit;
int potential_credit_transfer;
www.rejinpaul.com
public :
Account() {}
Account ( std::string name, int initial_credit, int
initial_credit_transfer ) :
owner_name ( name ),
credit ( initial_credit ),
potential_credit_transfer ( initial_credit_transfer )
{}
bool operator< ( Account const& account ) const
{
return credit < account.credit;
}
int potential_credit() const
{
return credit + potential_credit_transfer;
}
std::string const& owner() const
{
return owner_name;
}
};
struct CompareAccountCredit
{
bool operator() ( Account const& account1, Account const& account2 )
const
{
return account1 < account2;
}
};
struct CompareAccountPotentialCredit
{
bool operator() ( Account const& account1, Account const& account2 )
const
{
return account1.potential_credit() < account2.potential_credit();
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
};
www.rejinpaul.com
int main()
{
Account account1 ( "Dennis Ritchie", 1000, 250 ), account2 ( "Steeve Jobs",
500, 10000 ),
result_comparison;
result_comparison = std::min ( account1, account2, CompareAccountCredit()
);
std::cout << "min credit of account is : " + result_comparison.owner() <<
std::endl;
result_comparison = std::min ( account1, account2,
CompareAccountPotentialCredit() );
std::cout << "min potential credit of account is : " +
result_comparison.owner() << std::endl;
return 0;
}
Output
c) Iterator
Iterator - a list container
#include <iostream>
#include <list>
using namespace std;
int main()
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
Output
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
#include <string>
using namespace std;
int main()
{
// type of the collection
map<int, string> mp;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
d) Function Adaptors
#include <iostream>
#include <algorithm>
template<class T>
struct PrintData
{
PrintData ( std::ostream &out ) : os_ ( out ), count_ ( 0 ) {}
void operator() ( T x )
{
os_ << x << ' ';
++count_;
};
std::ostream &os_;
int count_;
};
int main ()
{
int array[] = {1, 4, 2, 8, 5, 7};
const int N = sizeof ( array ) / sizeof ( int );
// for_each() returns function object after being applied to each element
PrintData<int> f = std::for_each ( array, array + N, PrintData<int> (
std::cout ) );
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
std::cout << std::endl << std::endl << f.count_ << " objects printed." <<
std::endl;
return 0;
}
Output
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
#include<iostream>
#include<fstream>
#include<conio.h>
using namespace std;
int main()
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
while ( !oFileinput.eof() )
www.rejinpaul.com
{
// Read characters from the text file
oFileinput.get ( char_text );
// Increment the count values
int_count++;
}
// Display number of characters in text file
cout << "Number of characters in file is " << int_count;
//Close the text file opened in read mode
oFileinput.close();
return 0;
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
#include<fstream>
#include<conio.h>
using namespace std;
int main()
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
int main()
{
// Create object to read input values
ifstream oFileinput;
// Open the text file in read mode
oFileinput.open ( "out.txt" );
// Create object to display output values
ofstream oFileoutput;
// Open the text file in write mode
oFileoutput.open ( "sample.txt" );
// Character declaration
char char_text;
/* Read the character until the file reach end of file*/
while ( !oFileinput.eof() )
{
// Read characters from the "out.txt"
oFileinput.get ( char_text );
// Write characters to "sample.txt"
oFileoutput << char_text;
}
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
else
{
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
i) Reading from and writing the personal details into the file using getline
function
www.rejinpaul.com
#include <fstream>
#include <iostream>
using namespace std;
int main ()
{
char Personal_data[100];
// open a file in write mode.
ofstream oFileoutput;
oFileoutput.open ( "personalfile.dat" );
cout << "Writing to the file" << endl;
cout << "Enter your name: ";
cin.getline ( Personal_data, 100 );
// write input data into the file.
oFileoutput << Personal_data << endl;
cout << "Enter your age: ";
cin >> Personal_data;
cin.ignore();
// again write input data into the file.
oFileoutput << Personal_data << endl;
// close the opened file.
oFileoutput.close();
// open a file in read mode.
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
ifstream oFileinput;
oFileinput.open ( "personalfile.dat" );
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
while ((txt_file_data=getchar())!='#')
{
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
file_ASCII_result=txt_file_data-32;
oFileoutput<<file_ASCII_result;
}
oFileoutput.close();
//read the contents of file
ifstream oFileintput(char_filename);
cout<<"\n\n\t\tThe File contains\n\n";
while (oFileintput.eof()==0)
{
oFileintput.get(txt_file_data);
cout<<txt_file_data;
}
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
~StackImplementation();
};
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
int StackImplementation::IsEmpty()
{
www.rejinpaul.com
if ( mTopofstack == -1 )
return 1;
else
return 0;
}
int StackImplementation :: IsFull()
{
if ( mTopofstack == mMaximumsize - 1 )
return 1;
else
return 0;
}
void StackImplementation::Display()
{
if ( IsEmpty() )
cout << "Empty list" << endl;
else
{
cout << "The element in stack are:\n";
for ( int i = mTopofstack;i >= 0;i-- )
cout << pTemp[i] << " ";
cout << endl;
}
}
StackImplementation::~StackImplementation()
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
delete [] pTemp;
}
void Menu()
{
cout << "Press <1 to 4> keys to perform the following stack operation \n ";
cout << "1.Inserting element into the stack " << endl;
cout << "2.Deleting the stack element" << endl;
cout << "3.Display" << endl;
cout << "4.Exit" << endl;
}
main()
{
int get_option;
int get_value,
return_value;
StackImplementation oStack ( 10 );
cout << "Implementation of Stack and its operation" << endl;
Menu();
cout << "Enter your option: \n";
cin >> get_option;
while ( get_option < 4 )
{
switch ( get_option )
{
case 1:
cout << "Enter element" << endl;
cin >> get_value;
oStack.Push ( get_value );
break;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
case 2:
return_value = oStack.Pop();
if ( return_value == -1 )
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
b) Queue Implementation
#include<iostream>
#include<stdlib.h>
using namespace std;
class QueueImplementation
{
int mQueueArray[5];
int mRear, mFront;
public:
QueueImplementation()
{
mRear = -1;
mFront = -1;
}
void Enqueue ( int x )
{
if ( mRear > 4 )
{
cout << "Queue is overflow";
mFront = mRear = -1;
return;
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
mQueueArray[++mRear] = x;
www.rejinpaul.com
}
void Dequeue()
{
if ( mFront == mRear )
{
cout << "Queue is underflow";
return;
}
cout << "Dequeue:" << mQueueArray[++mFront];
}
void Display()
{
if ( mRear == mFront )
{
cout << "Queue is empty";
return;
}
cout << "Queue";
for ( int i = mFront + 1;i <= mRear;i++ )
cout << "\t" << mQueueArray[i];
}
};
main()
{
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
QueueImplementation oQueue;
www.rejinpaul.com
while ( 1 )
{
cout << "\nMenu";
cout << "\n1.Enqueue\n2.Dequeue\n3.Display\n4.Exit\nEnter your choice";
cin >> get_choice;
switch ( get_choice )
{
case 1:
cout << "Enter the number of elements:";
cin >> get_no_of_elements;
for ( int i = 0;i < get_no_of_elements;i++ )
{
cout << "Enter a number";
cin >> get_element;
oQueue.Enqueue ( get_element );
}
break;
case 2:
oQueue.Dequeue();
break;
case 3:
oQueue.Display();
break;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
case 4:
exit ( 0 );
break;
default:
cout << "Invalid";
break;
}
}
return ( 0 );
}
Output:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
class StackOperation
{
public:
char mStack[50];
int mTopOfStack;
StackOperation()
{
mTopOfStack = -1;
}
void Push ( char symbol )
{
if ( IsStackFull() )
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
if ( mTopOfStack == -1 )
return ( 1 );
www.rejinpaul.com
else
return ( 0 );
}
int IsStackFull()
{
if ( mTopOfStack == 49 )
return ( 1 );
else
return ( 0 );
}
};
class InfixToPostfix
{
char infix[50];
char postfix[50];
public:
void ReadInfixExpr()
{
cout << "\nEnter an infix expression:";
cin >> infix;
}
int WhiteSpace ( char symbol )
{
if ( symbol == ' ' || symbol == '\t' || symbol == '\0' )
return 1;
else
return 0;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
}
void ConvertToPostfix()
{
StackOperation oStackOperation;
int l, precedence, p;
char Entry1, Entry2;
p = 0;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
case '/':
if ( !oStackOperation.IsStackEmpty() )
{
precedence = PrecedenceSymbol ( Entry1 );
Entry2 = oStackOperation.Pop();
while ( precedence <= PrecedenceSymbol ( Entry2 ) )
{
postfix[p++] = Entry2;
if ( !oStackOperation.IsStackEmpty() )
Entry2 = oStackOperation.Pop();
else
break;
}
if ( precedence > PrecedenceSymbol ( Entry2 ) )
oStackOperation.Push ( Entry2 );
}
oStackOperation.Push ( Entry1 );
break;
default:
postfix[p++] = Entry1;
break;
}
}
}
//while stack is not empty
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
while ( !oStackOperation.IsStackEmpty() )
postfix[p++] = oStackOperation.Pop();
postfix[p] = '\0';
cout << "\nThe postfix expression is: " << postfix << endl;
}
int PrecedenceSymbol ( char symbol )
{
switch ( symbol )
{
// Precedence of / is 4
case '/':
return ( 4 );
// Precedence of * is 3
case '*':
return ( 3 );
// Precedence of + is 2
case '+':
return ( 2 );
// Precedence of - is 1
case '-':
return ( 1 );
// Precedence of ( is 0
case '(':
return ( 0 );
default:
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
return ( -1 );
}
}
};
main()
{
char choice = 'y';
InfixToPostfix oInfixToPostfix;
while ( choice == 'y' )
{
oInfixToPostfix.ReadInfixExpr();
oInfixToPostfix.ConvertToPostfix();
cout << "\n\nDo you want to continue ? (y/n): ";
cin >> choice;
}
return 0;
}
Output
d)
Evaluatio
n of
Postfix
Expressio
n
#include <iostream>
#include <stdlib.h>
#include <math.h>
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
PostfixExpressionEvaluation :: PostfixExpressionEvaluation( )
{
mTopofstack = -1 ;
}
void PostfixExpressionEvaluation :: SetExpression ( char *pstr )
{
ptemp = pstr ;
}
void PostfixExpressionEvaluation :: Push ( int item )
{
if ( mTopofstack ==MAX - 1 )
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
cout << endl << "Stack is full" ;
else
www.rejinpaul.com
{
mTopofstack++ ;
mStack[mTopofstack] = item ;
}
}
int PostfixExpressionEvaluation ::Pop( )
{
if ( mTopofstack == -1 )
{
cout << endl << "Stack is empty" ;
return NULL ;
}
int data = mStack[mTopofstack];
mTopofstack-- ;
return data ;
}
void PostfixExpressionEvaluation :: Evaluate( )
{
int value1, value2, result ;
while ( *ptemp )
{
if ( *ptemp == ' ' || *ptemp == '\t' )
{
ptemp++ ;
continue ;
}
if ( isdigit ( *ptemp ) )
{
mReturnvalue = *ptemp - '0' ;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
Push ( mReturnvalue ) ;
www.rejinpaul.com
}
else
{
value1 = Pop( ) ;
value2 = Pop( ) ;
switch ( *ptemp )
{
case '+' :
result = value2 + value1 ;
break ;
case '-' :
result = value2 - value1 ;
break ;
case '/' :
result = value2 / value1 ;
break ;
case '*' :
result = value2 * value1 ;
break;
case '%' :
result = value2 % value1 ;
break ;
case '$' :
result = pow ( value2 , value1 ) ;
break ;
default :
cout << "Unknown operator" ;
exit ( 1 ) ;
}
Push ( result ) ;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
}
ptemp++ ;
}
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
void Display();
};
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
else
{
if ( mFront == MAX - 1 )
mFront = 0;
else
mFront++;
}
}
return return_value;
}
void CircularQueue :: Display()
{
int i;
if ( mFront == -1 )
cout << "Circular Queue is Empty";
else
{
if ( mRear < mFront )
{
";
";
}
else
{
for ( i = mFront;i <= mRear;i++ )
cout << mQueue[i] << "
";
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
case 3 :
oCircularQueue.Display();
www.rejinpaul.com
break;
}
cout << "Do you want to continue<Y/N> ?";
cin >> option;
}
while ( option == 'Y' || option == 'y' );
}
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
#include<stdlib.h>
#include <malloc.h>
using namespace std;
struct Node
{
int Element;
Node *pLeft;
Node *pRight;
};
//pNode is a node pointer
typedef struct Node *pNode;
class BinarySearchTree
{
public:
void Insertion ( int, pNode & );
void Deletion ( int, pNode & );
int DeleteMinElement ( pNode & );
void Find ( int, pNode & );
pNode FindMinElement ( pNode );
pNode FindMaxElement ( pNode );
void MakeEmpty ( pNode & );
void Preorder ( pNode );
void Inorder ( pNode );
void Postorder ( pNode );
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
};
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
if ( new_element < oRoot->Element )
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
else
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
oRoot = NULL;
}
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
oRoot = oRoot->pRight;
return oRoot;
}
}
void BinarySearchTree::Find ( int x, pNode& oRoot )
{
if ( oRoot == NULL )
cout << "Element not found !";
else
{
if ( x < oRoot->Element )
Find ( x, oRoot->pLeft );
else
if ( x > oRoot->Element )
Find ( x, oRoot->pRight );
else
cout << "Element Found !";
}
}
void BinarySearchTree::Preorder ( pNode oRoot )
{
if ( oRoot != NULL )
{
cout << oRoot->Element << "-->";
Preorder ( oRoot->pLeft );
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
Preorder ( oRoot->pRight );
}
www.rejinpaul.com
}
void BinarySearchTree::Inorder ( pNode oRoot )
{
if ( oRoot != NULL )
{
Inorder ( oRoot->pLeft );
cout << oRoot->Element << "-->";
Inorder ( oRoot->pRight );
}
}
void BinarySearchTree::Postorder ( pNode oRoot )
{
if ( oRoot != NULL )
{
Postorder ( oRoot->pLeft );
Postorder ( oRoot->pRight );
cout << oRoot->Element << "-->";
}
}
void BinarySearchTree::FindLeftChild ( int left_child, pNode& oRoot )
{
if ( oRoot == NULL )
cout << "The node does not exists ";
else
if ( left_child < oRoot->Element )
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
cout << "Right child of " << right_child << "is " << oRoot>pRight->Element;
else
cout << "No Right Child !";
}
}
int main()
{
int choice, element, left_child , right_child;
BinarySearchTree oBst;
char c = 'y';
pNode root, min, max;
root = NULL;
do
{
cout << "Binary Search Tree
\n";
\n ";
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
case 3:
cout << "
3.Find \n";
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
break;
case 5:
cout << " 5.Findmin \n";
if ( root == NULL )
cout << " Tree is empty";
else
{
min = oBst.FindMinElement ( root );
cout << "Smallest element is : " << min->Element << endl;
}
break;
case 6:
cout << " 6.Preorder \n";
if ( root == NULL )
cout << " Tree is empty";
else
{
cout << "Preorder traversal (Recursive) is : ";
oBst.Preorder ( root );
}
break;
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
case 7:
cout << " 7.Inorder\n ";
if ( root == NULL )
cout << " Tree is empty";
else
{
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
if ( root == NULL )
cout << "Tree is empty";
www.rejinpaul.com
else
{
cout << "Enter the node for which the left child is to befound
: ";
cin >> left_child;
oBst.FindLeftChild ( left_child, root );
}
break;
case 10:
cout << " 10.Finding the Right Child\n";
if ( root == NULL )
cout << " Tree is empty";
else
{
cout << "Enter the node for which the Right child is to be
found";
cin >> right_child;
oBst.FindRightChild ( right_child, root );
}
break;
case 0:
exit ( 0 );
}
cout << "\n Continue (y/n) ? ";
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
cin >> c;
}
while ( c == 'y' || c == 'Y' );
return 0;
}
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
int Element;
Node *pLeft;
Node *pRight;
};
//pNode is a node pointer
typedef struct Node *pNode;
class BinarySearchTree
{
public:
void Insertion ( int, pNode & );
void MakeEmpty ( pNode & );
void Preorder ( pNode );
void Inorder ( pNode );
void Postorder ( pNode );
};
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
if ( root != NULL )
{
Postorder ( root->pLeft );
Postorder ( root->pRight );
cout << root->Element << "-->";
}
}
int main()
{
\n";
\n ";
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
case 3:
cout << " 3.Inorder\n ";
if ( root == NULL )
cout << " Tree is empty";
else
{
cout << " Inorder traversal (Recursive) is : ";
oBst.Inorder ( root );
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
break;
case 4:
cout << " 4.Postorder \n";
if ( root == NULL )
cout << "Tree is empty";
else
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
// No of edges in the graph
int mNumberOfEdges;
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
cout << " < " << i << " , " << j << " > ::";
int w;
cin >> w;
if ( w != 0 )
{
mNumberOfEdges++;
mGraphEdge[mNumberOfEdges][1] = i;
mGraphEdge[mNumberOfEdges][2] = j;
mGraphEdge[mNumberOfEdges][3] = w;
}
}
}
// print the graph edges
cout << "\n\nThe edges in the given graph are::\n";
for ( int i = 1;i <= mNumberOfEdges;i++ )
{
cout << " < " << mGraphEdge[i][1] << " , " << mGraphEdge[i][2] << " >
::" << mGraphEdge[i][3] << endl;
}
}
int PrimsAlgorithm::Findset ( int x )
{
for ( int i = 1;i <= mSet1;i++ )
if ( x == mSet1Array[i] )
return 1;
for ( int i = 1;i <= mSet2;i++ )
if ( x == mSet2Array[i] )
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
return 2;
return -1;
}
void PrimsAlgorithm::Algorithm()
{
mNumberOfTreeEdges = 0;
mSet1 = 1;
// Fixing Source Node
mSet1Array[1] = 1;
mSet2 = mNumberOfNodes - 1;
int i;
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
edge1 = mGraphEdge[i][1];
edge2 = mGraphEdge[i][2];
edge3 = mGraphEdge[i][3];
p = i;
}
}
}
// Break if there is no such edge
cout << "The edge included in the tree is ::";
cout << " < " << edge1 << " , " << edge2 << " > " << endl;
// Delete the edge from graph edges
for ( int l = p;l < mNumberOfEdges;l++ )
{
mGraphEdge[l][1] = mGraphEdge[l+1][1];
mGraphEdge[l][2] = mGraphEdge[l+1][2];
mGraphEdge[l][3] = mGraphEdge[l+1][3];
}
mNumberOfEdges--;
// Add the edge to the tree
mNumberOfTreeEdges++;
mTreeEdge[mNumberOfTreeEdges][1] = edge1;
mTreeEdge[mNumberOfTreeEdges][2] = edge2;
www.rejinpaul.com
mTreeEdge[mNumberOfTreeEdges][3] = edge3;
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
// Alter the set partitions
mSet1++;
www.rejinpaul.com
int m;
if ( Findset ( edge2 ) == 2 )
{
mSet1Array[mSet1] = edge2;
m = edge2;
}
else
if ( Findset ( edge1 ) == 2 )
{
mSet1Array[mSet1] = edge1;
m = edge1;
}
int x;
for ( x = 1;mSet2Array[x] != m;x++ );
for ( ;x < mSet2;x++ )
mSet2Array[x] = mSet2Array[x+1];
mSet2--;
// Print the sets
int k;
cout << "NOW\nSet1 :: ";
for ( k = 1;k <= mSet1;k++ )
cout << mSet1Array[k] << ' ';
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
PrimsAlgorithm oprims;
oprims.Input();
www.rejinpaul.com
oprims.Algorithm();
oprims.Output();
return 0;
}
Output
b) Kruskal Algorithm
#include<iostream>
#include<conio.h>
using namespace std;
int gParent [10];
class KruskalAlgorithm
{
int mNode1, mNode2, mUnvisited, mVisited, i, j, mNoOfNodes, mNoOfEdges;
int mMinimumValue, mMinimumCost, mCost[10][10];
public:
KruskalAlgorithm()
{
mNoOfEdges = 1;
mMinimumCost = 0;
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
void ReadGraph();
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
mMinimumValue = cost[i][j];
mNode1 = mUnvisited = i;
mNode2 = mVisited = j;
}
while ( gParent[mUnvisited] )
mUnvisited = gParent[mUnvisited];
while ( gParent[mVisited] )
mVisited = gParent[mVisited];
if ( mUnvisited != mVisited )
{
mNoOfEdges++;
cout << "\nedge(" << mNode1 << "->" << mNode2 << ")=" <<
mMinimumValue;
mMinimumCost += mMinimumValue;
gParent[mVisited] = mUnvisited;
}
cost[mNode1][mNode2] = cost[mNode2][mNode1] = 999;
}
cout << "\nminimum cost=" << mMinimumCost;
}
main()
{
KruskalAlgorithm oKruskalAlgorithm;
oKruskalAlgorithm.ReadGraph();
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
Output
Adjacency Matrix*/
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
void Initialize();
int GetClosestUnmarkedNode();
www.rejinpaul.com
void CalculateDistance();
void Output();
void PrintShortestPath ( int );
};
/* Read number of vertices, source vertex and
Adjacency Matrix*/
void DijkstraAlgorithm::ReadVertex()
{
cout << "Enter the number of vertices of the graph(should be > 0)\n";
cin >> mNumOfVertices;
while ( mNumOfVertices <= 0 )
{
cout << "Enter the number of vertices of the graph(should be > 0)\n";
cin >> mNumOfVertices;
}
cout << "Enter the adjacency matrix for the graph\n";
cout << "To enter infinity enter " << INFINITY << endl;
for ( int i = 0;i < mNumOfVertices;i++ )
{
cout << "Enter the (+ve)weights for the row " << i << endl;
for ( int j = 0;j < mNumOfVertices;j++ )
{
cin >> mAdjMatrix[i][j];
www.rejinpaul.com
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
int min_distance = INFINITY;
int closest_unmarked_node;
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
cout << "No path from <<source<<to " << ( char ) ( node + 97 ) <<
endl;
else
{
PrintShortestPath ( mPredecessor[node] );
cout << ( char ) ( node + 97 ) << "..";
}
}
void DijkstraAlgorithm::Output()
{
for ( int i = 0;i < mNumOfVertices;i++ )
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
if ( i == mSourceVertex )
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
}
void BellFordAlgorithm::Check()
{
for ( int u = 1;u <= mNoOfNodes;u++ )
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
j = mPredecessor[j];
}
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
void FloydsWarshallAlgorithm::ReadGraph()
{
int i, j, k;
cout<<"a["<<i<<","<<j<<"] = ";
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
mPathMatrix[i][j] = mAdjacencyMatrix[i][j];
}
}
}
void FloydsWarshallAlgorithm::Display()
{
for ( int i = 1;i <= mNoOfNodes;i++ )
{
for ( int j = 1;j <= mNoOfNodes;j++ )
{
cout << mPathMatrix[i][j] << "
";
}
cout << endl;
}
}
void FloydsWarshallAlgorithm::PathMatrix()
{
int i, j, k;
for ( k = 1;k <= mNoOfNodes;k++ )
{
for ( i = 1;i <= mNoOfNodes;i++ )
{
for ( j = 1;j <= mNoOfNodes;j++ )
{
mPathMatrix[i][j] = mPathMatrix[i][j] || mPathMatrix[i][k] &&
mPathMatrix[k][j];
}
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
}
}
}
void FloydsWarshallAlgorithm::Algorithm()
{
int i, j, k;
for ( i = 1;i <= mNoOfNodes;i++ )
{
for ( j = 1;j <= mNoOfNodes;j++ )
{
mPathMatrix[i][j] = mGraphCost[i][j];
}
}
for ( k = 1;k <= mNoOfNodes;k++ )
{
for ( i = 1;i <= mNoOfNodes;i++ )
{
for ( j = 1;j <= mNoOfNodes;j++ )
{
if ( mPathMatrix[i][j] < mPathMatrix[i][k] + mPathMatrix[k][j]
)
{
mPathMatrix[i][j] = mPathMatrix[i][j];
}
else
{
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
oFloydsWarshallAlgorithm.Display();
}
Output
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com
www.Vidyarthiplus.com
WWW.VIDYARTHIPLUS.COM
www.rejinpaul.com
www.rejinpaul.com
WWW.VIDYARTHIPLUS.COM
V+ TEAM
www.Vidyarthiplus.com