Friday 18 August 2017

Implement a class that manages a singly linked list of EmployeeNode objects storing information about employees. Each EmployeeNode object stores the name and salary of an employee. The employee name is a null-terminated character string, and the salary is an integer. Perform following operations: 1) Traverse (Access/Display each element of the link list) 2) Insert node at start 3) Insert node at end 4) Insert a node after specified number of nodes 5) Delete a node from start 6) Delete a node from end 7) Delete a node after specified number of nodes 8) Sort nodes in ascending order according to salary



SOLUTION:
#include "stdafx.h"
#include "iostream"
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////////
struct EmployeeNode
{
       char name[100];     
       int salary;  
EmployeeNode* next;
       EmployeeNode( ) : salary(0), next(NULL) 
              { }
};
/////////////////////////////////////////////////////////////////////////////////////////
class Employee
{
       private:
              EmployeeNode* first, *current;
       public:
              Employee( ) : first(NULL), current(NULL)
                     { }
              void show( );
              void add_at_start( );
              void add_at_end( );
              void add_at_speci( );
              void del_at_start( );
              void del_at_end( );
              void del_at_speci( );
              void sort( );
};
//--------------Traverse (Access/Display each element of the link list) -----------------
void Employee::show( )
{
       EmployeeNode* temp = first;
       cout << endl << "Name\t\t\tSalary" << endl << endl;
       do
       {
              cout << temp->name << "\t\t\t" << temp->salary << endl;
              temp = temp->next;
       }
       while(temp != NULL);
}

//--------------------------------Insert node at start-----------------------------------
void Employee::add_at_start( )
{
       EmployeeNode* temp = new EmployeeNode;
       cout << "\nEnter Employee's Name: ";    
cin >> temp->name;
       cout << "Enter Employee's Salary: ";    
cin >> temp->salary;
       if(first == NULL)
       {
              first = temp;
              current = first;
       }
       else
       {
              current->next = temp;
              current = temp;
       }
}
//---------------------------------Insert node at end------------------------------------
void Employee::add_at_end( )
{
       EmployeeNode* temp = new EmployeeNode;
       cout << "\nEnter Employee's Name: ";
              cin >> temp->name;
       cout << "Enter Employee's Salary: ";
              cin >> temp->salary;
       temp->next = first; 
       first = temp;
}
//-------------------Insert a node after specified number of nodes ----------------------
void Employee::add_at_speci( )
{
       int n;
       cout << "\nAfter How Many Nodes Do You Want to Add a New Node? ";   
              cin >> n;
       int s_n = 0; 
       EmployeeNode* T = NULL;   
       current = first;
       while(s_n != n)
       {
              T = current;
              s_n++;
              current = current->next;
       }
       EmployeeNode* temp = new EmployeeNode;
       T->next = temp;      temp->next = current;
       cout << "\nEnter Employee's Name: ";     cin >> temp->name;
       cout << "Enter Employee's Salary: ";     cin >> temp->salary;
}
//------------------------------Delete a node from start---------------------------------
void Employee::del_at_start( )
{
       cout<<"\n";
       EmployeeNode* temp = first;       current = NULL;
       while(temp!=NULL)
       {
              current = temp;            temp = temp->next;
              cout << " Deleting " << current->name << endl;         delete current;
       }
}
//-------------------------------Delete a node from end----------------------------------
void Employee::del_at_end( )
{
       EmployeeNode* prev;
       do
       {
              prev = NULL;
              EmployeeNode *temp = first;
              while(temp->next != NULL)
              {
                     prev = temp;
                     temp = temp->next;
              }
              prev->next = NULL;
              cout << " Deleting " << temp->name << endl;
              delete temp;
       }
       while(prev != NULL);
}
//-------------------Delete a node after specified number of nodes ----------------------
void Employee::del_at_speci( )
{
       int n;
       cout << "\nWhich Node Do You Want to Delete? ";
              cin >> n;
       int s_n = 0;
       EmployeeNode* T = NULL, *prev = NULL;   
       current = first;
       while(s_n != n)
       {
              prev = T;
              T = current;
              s_n++;
              current = current->next;
       }
       if(T == first)
       {
              first = current;
              cout << " Deleting " << T->name << endl;
              delete T;
       }
       else
       {
              prev->next = current;
              cout << " Deleting " << T->name << endl;
              delete T;
       }
}
//-----------------Sort nodes in ascending order according to salary --------------------
void Employee::sort( )
{
       current = first;
       while(current != NULL)
       {
              EmployeeNode* temp = current->next;
              while(temp != NULL)
              {
                     if(current->salary > temp->salary)
                     {
                           EmployeeNode* swaper = new EmployeeNode;
                           swaper->salary = temp->salary;    strcpy_s(swaper->name , temp->name);
                           temp->salary = current->salary;   strcpy_s(temp->name , current->name);
                           current->salary = swaper->salary; strcpy_s(current->name,swaper->name);
                           delete swaper;
                     }
                     temp = temp->next;
              }
              delete temp;
              current = current->next;
       }
}

//--------------------------------------Output 1-----------------------------------------
void main( )
{
       Employee e1;
       e1.add_at_start( );         e1.add_at_start( );         e1.add_at_start( );
       e1.show( );                 e1.del_at_start( );
       system("pause");
}

//--------------------------------------Output 2-----------------------------------------
void main( )
{
       Employee e1;
       e1.add_at_end( );          e1.add_at_end( );          e1.add_at_end( );
       e1.show( );                 e1.del_at_start( );
       system("pause");
}


//--------------------------------------Output 7-----------------------------------------
void main( )
{
       Employee e1;
       e1.add_at_start( );        e1.add_at_start( );        e1.add_at_start( );        e1.show( );
       e1.sort( );                cout << endl << "After Sorting:";                      e1.show( );
       system("pause");
}

0 comments: