Logo 
Search:

C++ Programming Articles

Submit Article
Home » Articles » C++ Programming » Homework HelpRSS Feeds

Program of singly link list with different functionalities

Posted By: Easy Tutor     Category: C++ Programming     Views: 5118

Write a program of singly link list with below functionalities

1) Create list
2) Display list
3) List status
4) Delete list
5) Search
6) Copy list
7) Reverse list
8) Sort list
9) Merge list
10) Union of list
11) Intersection of list

Code for Program of singly link list with different functionalities in C++ Programming

#include <iostream.h>
#include <stdlib.h> //for exit(1)
#include <conio.h>
#define MAX 10


struct node{
       int data;
       struct node *next;
};

class sngllist{
    node *A,*B,*MRG;
    int cnt;
    public:
    sngllist(){
       cnt=0;
       A=NULL;
       B=NULL;
       MRG=NULL;
    }
    //ALL THE OPERATIONS ARE PERFORMED ON NODE A//Except Merge, union, intersection.void create(int); //initial data assignmentvoid display(int); //process is display (assumed)int count(int);
    void insert();
    void del();
    void search();
    void copy();
    void reverse();
    void sort();
    void merge();
    void unionList();
    void intersectionList();
};


void sngllist :: create(int check){
     node *start=NULL,*newl=NULL,*end=NULL;
     int takedata;
     clrscr();
     cout<<"\n\t\t*****Create List*****\n";
     while(1){
    cout<<"\t\t-999 to Quit\n";
    cout<<"\t\tEnter data : ";
    cin>>takedata;
    if(takedata == -999)
       break;
    else{
          //create memory for new node
          newl = new node;
          if(newl == NULL){
         cout<<"\n\t\tNot Enough Memory";
         getch();
         exit(1);
          }
          newl->data = takedata;
          newl->next = NULL;
          cnt++;

          //check for first nodeif(start == NULL)
          start = newl;
          else
          end->next = newl;
          end = newl;
          end->next = NULL;
    }//end else
     }//end while//check to create which listif(check==1){
    A->next = start;
    A = start;
     }
     if(check==2){
    B->next = start;
    B = start;
     }
     if(check==3){
    MRG->next = start;
    MRG = start;
     }
}

void sngllist :: display(int check){
     node *tmp;

     //check to print which listif(check==1)
     tmp=A;
     if(check==2)
     tmp=B;
     if(check==3)
     tmp=MRG;

     cout<<"\n\t\t*****Display*****\n";
     cout<<"\t\t";
     for( ; tmp!=NULL; tmp=tmp->next){
     cout<<tmp->data;
     if(tmp->next != NULL)
        cout<<"-->";
     }//end for
     getch();
}

int sngllist :: count(int check){
     node *tmp;
     int cnt;

     for(tmp=A,cnt=0 ; tmp!=NULL; tmp=tmp->next,cnt++);//do nothingif(check==1){
    cout<<"\n\t\t*****Status of List*****\n";
    cout<<"\t\tTotal Items : "<<cnt;
    getch();
    return(cnt);
     }
     elsereturn(cnt);  //To use count value in other functions
}


void sngllist :: insert(){
     node *newl=NULL,*tmp=NULL;
     int choice,takedata,pos,i;
     while(1){
    clrscr();
    cout<<"\n\t\t*****Insertion*****\n";
    cout<<"\t\t1) Begining\n";
    cout<<"\t\t2) In Between\n";
    cout<<"\t\t3) End\n";
    cout<<"\t\t4) Return to Main Menu\n";
    cout<<"\t\tEnter your choice : ";
    cin>>choice;
    if(choice==1 || choice==2 || choice==3){
    //create memory for new node
      newl = new node;
      if(newl == NULL){
         cout<<"\n\t\tNot Enough Memory";
         getch();
         exit(1);
      }
      cout<<"\n\t\tEnter data : ";
      cin>>takedata;
      newl->data = takedata;
      newl->next = NULL;
    }
    elsereturn;

    switch(choice){
         case 1 :   newl->next = A;
            A = newl;
            break;

         case 2 :   cout<<"\n\t\tEnter Position : ";
            cin>>pos;
            if(pos <=1 || pos >= count(2)){
                cout<<"\n\t\tInvalid Position";
                getch();
                break;
            }
            else{
               //to points to previous node from where//to insertfor(i=1,tmp=A; i < (pos-1); tmp=tmp->next,i++);

               newl->next = tmp->next;
               tmp->next  = newl;
               break;
            }
         case 3 :   //For pointing to last nodefor(tmp=A; tmp->next != NULL; tmp=tmp->next);

            tmp->next = newl;
    }//end switch
     }//end while
}



void sngllist :: del(){
     node *delnode=NULL,*tmp=NULL;
     int choice,deldata,pos,i;
     while(1){
    clrscr();
    cout<<"\n\t\t*****Deletion*****\n";
    cout<<"\t\t1) Begining\n";
    cout<<"\t\t2) In Between\n";
    cout<<"\t\t3) End\n";
    cout<<"\t\t4) Return to Main Menu\n";
    cout<<"\t\tEnter your choice : ";
    cin>>choice;
    switch(choice){
         case 1 :   delnode->next = A;
            delnode = A;
            A = A->next;
            break;

         case 2 :   cout<<"\n\t\tEnter Position : ";
            cin>>pos;
            if(pos <=1 || pos >= count(2)){
                cout<<"\n\t\tInvalid Position";
                getch();
                break;
            }
            else{
               //to points to previous node from where//to insertfor(i=1,tmp=A; i < (pos-1); tmp=tmp->next,i++);

               delnode = tmp->next;
               tmp->next = tmp->next->next;
               break;
            }
         case 3 :   //For pointing to last nodefor(tmp=A; tmp->next->next != NULL; tmp=tmp->next);
            delnode = tmp->next;
            tmp->next = NULL;
            break;
         case 4  :  return;
         default :   cout<<"\n\t\tInvalid Position";
             getch();
    }//end switch
    delete(delnode);
     }//end while
}


void sngllist :: search(){
     node *tmp;
     int item,n;
     cout<<"\n\t\t*****Search*****\n";
     cout<<"\t\tEnter data to be searched : ";
     cin>>item;
     for(tmp=A,n=1; tmp!=NULL; tmp=tmp->next,n++){
     if(tmp->data == item){
        cout<<"\n\t\tSearch is located at "<<n<<" location";
        getch();
        return;
     }
     }
     cout<<"\n\t\tSearch Not Found";
     getch();
}


void sngllist :: copy(){
     node *tmp=NULL,*newl=NULL,*end=NULL;
     B=NULL;
     cout<<"\n\t\t*****Copy*****\n";
     for(tmp=A; tmp!=NULL; tmp=tmp->next){
     //create memory
     newl = new node;
     newl->data = tmp->data;
     newl->next = NULL;
     if(B == NULL){
        B->next = newl;
        B = newl;
     }
     else
         end->next=newl;
     end=newl;
     }
     cout<<"\n\t\tAfter Copy...";
     cout<<"\n\n\t\t==List A==";
     display(1);  //List A
     cout<<"\n\n\t\t==List B==";
     display(2); //List B
}

void sngllist :: reverse(){
    //Reversing Logic without using another list
    node *prev=NULL,*curr=A,*succ=A->next;
    while(succ!=NULL){
       curr->next = prev;
       prev = curr;
       curr = succ;
       succ = succ->next;
    }
    curr->next = prev;
    prev = curr;

    A = prev->next;
    A = prev;
    display(1);
}


void sngllist :: sort(){
     node *i,*j;
     int tmp;
     cout<<"\n\t\t*****Sort*****\n";
     for(i=A;i!=NULL;i=i->next){
       for(j=i;j!=NULL;j=j->next){
      if(i->data > j->data){
         tmp = i->data;
         i->data = j->data;
         j->data = tmp;
      }
       }
     }
     cout<<"\n\t\tAfter Sort...";
     cout<<"\n\n\t\t==List==";
     display(1); //List B
}

void sngllist :: merge(){
     node *i,*newl=NULL,*end=NULL;
     MRG=NULL;

     create(1); //Create List A
     create(2); //Create List B

     cout<<"\n\t\t*****Merge*****\n";
     //Merging A to listfor(i=A;i!=NULL;i=i->next){
     //create memory
     newl = new node;
     newl->data = i->data;
     newl->next = NULL;
     if(MRG == NULL){
        MRG->next = newl;
        MRG = newl;
     }
     else
         end->next=newl;
     end=newl;
     }

     //Merging B to listfor(i=B;i!=NULL;i=i->next){
     //create memory
     newl = new node;
     newl->data = i->data;
     newl->next = NULL;
     end->next=newl;
     end=newl;
      }

     cout<<"\n\t\tAfter Merge...";
     cout<<"\n\n\t\t==List==";
     display(3); //List MRG
}


void sngllist :: unionList(){
     node *i,*j,*newl=NULL,*end=NULL;
     MRG=NULL;
     int flag=0;

     create(1); //Create List A
     create(2); //Create List B

     cout<<"\n\t\t*****Union of List*****\n";
     //Union A to listfor(i=A;i!=NULL;i=i->next){
         if(MRG == NULL){
           newl = new node;
           newl->data = i->data;
           newl->next = NULL;
           MRG->next = newl;
           MRG = newl;
           end->next=newl;
           end=newl;
           continue;
         }
    for(j=MRG;j!=NULL;j=j->next){
      if(i->data != j->data)
          flag=1;
     }

     if(flag==1){
          flag=0;
         //create memory
         newl = new node;
         newl->data = i->data;
         newl->next = NULL;
         end->next=newl;
         end=newl;
      }//end if
     }//end for//Union B to listfor(i=B;i!=NULL;i=i->next){
    for(j=MRG;j!=NULL;j=j->next){
      if(i->data != j->data)
          flag=1;
     }
     if(flag==1){
          flag=0;
         //create memory
         newl = new node;
         newl->data = i->data;
         newl->next = NULL;
         end->next=newl;
         end=newl;
      }//end if
     }//end for

     cout<<"\n\t\tAfter Union...";
     cout<<"\n\n\t\t==List==";
     display(3); //List MRG
}

void sngllist :: intersectionList(){
     node *i,*j,*newl=NULL,*end=NULL;
     MRG=NULL;
     int flag=0;

     create(1); //Create List A
     create(2); //Create List B

     cout<<"\n\t\t*****Intersection of List*****\n";
     //Intersection  to listfor(i=A;i!=NULL;i=i->next){
    for(j=B;j!=NULL;j=j->next){
      if(i->data == j->data)
          flag=1;
     }

     if(flag==1){
          flag=0;
         if(MRG == NULL){
           newl = new node;
           newl->data = i->data;
           newl->next = NULL;
           MRG->next = newl;
           MRG = newl;
           end->next=newl;
           end=newl;
           continue;
         }
         //create memory
         newl = new node;
         newl->data = i->data;
         newl->next = NULL;
         end->next=newl;
         end=newl;
      }//end if
     }//end for

     cout<<"\n\t\tAfter Intersection...";
     cout<<"\n\n\t\t==List==";
     display(3); //List MRG
}


void main()
{
   int choice;
   sngllist obj;
   while(1){
   clrscr();
   cout<<"\n\t\tSINGLY LINK-LIST OPERATIONS\n\n";
   cout<<"\t\t1)  Create List\n";
   cout<<"\t\t2)  Display List\n";
   cout<<"\t\t3)  List Status\n";
   cout<<"\t\t4)  List Insertion\n";
   cout<<"\t\t5)  List Deletion\n";
   cout<<"\t\t6)  Search List\n";
   cout<<"\t\t7)  Copy List\n";
   cout<<"\t\t8)  Reverse List\n";
   cout<<"\t\t9)  Sort List\n";
   cout<<"\t\t10) Merge List\n";
   cout<<"\t\t11) Union of List\n";
   cout<<"\t\t12) Intersection of List\n";
   cout<<"\t\t13) Exit\n";
   cout<<"\t\tEnter your Choice :  ";
   cin>>choice;
   switch(choice){
     case 1 :  obj.create(1); // 1 for A listbreak;
     case 2 :  obj.display(1);// 1 for A listbreak;
     case 3 :  choice = obj.count(1);
           //choice value is not used anywhere//it is just a placeholderbreak;
     case 4 :  obj.insert();
           break;
     case 5 :  obj.del();
           break;
     case 6 :  obj.search();
           break;
     case 7:  obj.copy();
           break;
     case 8 :  obj.reverse();
           break;
     case 9 :  obj.sort();
           break;
     case 10 :  obj.merge();
           break;
     case 11 :  obj.unionList();
           break;
     case 12 :  obj.intersectionList();
           break;
     case 13 :  gotoout;
     default:  cout<<"\n\n\t\tInvalid Choice\n\n";
           getch();
           break;
   }
 }
 out:
}
  
Share: 


Didn't find what you were looking for? Find more on Program of singly link list with different functionalities Or get search suggestion and latest updates.

Easy Tutor
Easy Tutor author of Program of singly link list with different functionalities is from United States. Easy Tutor says

Hello Friends,

I am Free Lance Tutor, who helped student in completing their homework.

I have 4 Years of hands on experience on helping student in completing their homework. I also guide them in doing their final year projects.

I have share many programs on this website for everyone to use freely, if you need further assistance, than please contact me on easytutor.2ya [at the rate] gmail [dot] com

I have special discount scheme for providing tutor services. I am providing tutor service to students from various contries, currently most of my students are from United States, India, Australia, Pakistan, Germany, UK and Canada.

I am also here to expand my technical network to receive more opportunity in my career, make friends to help them in resolving their technical problem, learn and share my knowledge, If you like to be my friend, Please send me friend request.

Thanks,
Happy Programming :)

 
View All Articles

Related Articles and Code:


 

Other Interesting Articles in C++ Programming:


 
Please enter your Comment

  • Comment should be atleast 30 Characters.
  • Please put code inside [Code] your code [/Code].

 
No Comment Found, Be the First to post comment!