Friday, June 14, 2013

SINGLY LINKED LIST

SINGLY LINKED LIST (C++ CODE):

Last Updated on: 12th Dec 2015



 //performing differnt operations on sll

#include<iostream.h>
#include<stdio.h>
#include<conio.h>
class sll
{
 private:
  struct snode
  {
   int data;
   struct snode *next;
  }*start;
 public:
  sll()
  {
   start=NULL;
  }
  void create();
  void display();
  void insert_beg();
  void insert_end();
  void insert_mid();
  void delete_beg();
  void delete_end();
  void delete_mid();
  void search();
  void reverse();
  void addition();
  void concate(sll);
  void sort();
  void merge(sll);

};
void sll:: create()
{
  snode *new_node,*current;
 char ch;
 do
 {
  new_node=new snode;
  cout<<"\nenter the data:";
  cin>>new_node->data;
  new_node->next=NULL;
  if(start==NULL)
  {
   start=new_node;
   current=new_node;
  }
  else
  {
   current->next=new_node;
   current=current->next;
  }
  cout<<"\ndo u want  to add more nodes?";
  cin>>ch;
 }while(ch=='y'||ch=='Y');
}
void sll::display()
{
 snode *temp;
 if(start==NULL)
 {
  cout<<"\nList is empty";
 }
 else
 {
  temp=start;
  cout<<" list is:";
  while(temp!=NULL)
  {
   cout<<"\t"<<temp->data;
   temp=temp->next;
  }
 }
}
void sll::insert_beg()
{
 snode *node;
 node=new snode;
 cout<<"\nenter the data:";
 cin>>node->data;
 if(start==NULL)
 {
  start=node;
  node->next=NULL;
 }
 else
 {
  node->next=start;
  start=node;
 }
}
void sll::insert_end()
{
 snode *temp,*node;
 node=new snode;
 cout<<"\nenter the data:";
 cin>>node->data;
 temp=start;
 while(temp->next!=NULL)
 {
  temp=temp->next;
 }
 temp->next=node;
 node->next=NULL;
}
void sll::insert_mid()
{
 snode *temp,*node;
 int count=1,pos;
 node=new snode;
 cout<<"\nenter the data:";
 cin>>node->data;
 cout<<"\nenter the position:";
 cin>>pos;
 temp=start;
 while(count<pos-1)
 {
  temp=temp->next;
  count++;
 }
 node->next=temp->next;
 temp->next=node;
}
void sll::delete_beg()
{
 snode *temp;
 if(start==NULL)
 {
  cout<<"\n Cannot delete....";
 }
 else
 {
  temp=start;
  start=temp->next;
  cout<<temp->data<<"\thas been deleted\n";
  delete temp;
 }
}
void sll::delete_end()
{
 snode *temp1,*temp2;
 if(start==NULL)
 {
  cout<<"\n Cannot delete....";
 }
 else
 {
  temp1=start;
  temp2=start;
  while(temp1->next!=NULL)
  {
   temp1=temp1->next;
  }
  while(temp2->next!=temp1)
  {
   temp2=temp2->next;
  }
  temp2->next=NULL;
  cout<<temp1->data<<"\thas been deleted\n";
  delete temp1;
 }
}
void sll::delete_mid()
{
 snode *temp1,*temp2;
 int count=1,pos;
 if(start==NULL)
 {
  cout<<"\nCannot delete....";
 }
 else
 {
  cout<<"\nenter the position:";
  cin>>pos;
  temp1=start;
  temp2=start;
  while(count<=pos-1)
  {
   temp1=temp1->next;
   count++;
  }
  while(temp2->next!=temp1)
  {
   temp2=temp2->next;
  }
  temp2->next=temp1->next;
  cout<<temp1->data<<"\thas been deleted\n";
  delete temp1;
 }
}
void sll::search()
{
 snode *temp;
 int key,pos,count=1;
 if(start==NULL)
 {
  cout<<"\nList is empty.....";
 }
 else
 {
  temp=start;
  cout<<"\nenter the data u want to search:";
  cin>>key;
  while(temp->next!=NULL)
  {
   if(key==temp->data)
   {
    pos=count;
    cout<<"Data"<<key<<"found at position:"<<pos;
   }
   temp=temp->next;
   count++;
  }
 }
}
void sll::reverse()
{
 snode *back,*current,*temp;
 back=NULL;
 current=start;
 temp=start->next;
 while(current!=NULL)
 {
  current->next=back;
  back=current;
  current=temp;
  if(temp!=NULL)
  {
   temp=temp->next;
  }
 }
 start=back;
}
void sll::addition()
{
 snode *temp;
 int sum=0;
 if(start==NULL)
 {
  cout<<"\nWe cannot add as list is empty....";
 }
 else
 {
  temp=start;
  while(temp!=NULL)
  {
   sum=sum+temp->data;
   temp=temp->next;
  }
  cout<<"\nAddition="<<sum;
 }
}
void sll::concate(sll b)
{
 snode *temp;
 if(start==NULL)
 {
  create();
  display();
 }
 b.create();
 b.display();
 temp=start;
 while(temp->next!=NULL)
 {
  temp=temp->next;
 }
 temp->next=b.start;
}
void sll::sort()
{
 snode *temp1,*temp2;
 int temp;
 temp1=start;
 while(temp1!=NULL)
 {
  temp2=start;
  while(temp2->next!=NULL)
  {
   if(temp2->data>temp2->next->data)
   {
    temp=temp2->data;
    temp2->data=temp2->next->data;
    temp2->next->data=temp;
   }
   temp2=temp2->next;
  }
  temp1=temp1->next;
 }
}
void sll::merge(sll b)
{
 snode *temp1,*temp2,*temp3,*current;
 if(start==NULL)
 {
  create();
  display();
 }
 b.create();
 b.display();
 temp1=start;
 temp2=b.start;
 temp3=NULL;
 current=temp3;
 while(temp1!=NULL&&temp2!=NULL)
 {
  if(temp1->data>temp2->data)
  {
   temp3=temp2;
   temp2=temp2->next;
  }
  else if(temp1->data<temp2->data)
  {
   temp3=temp1;
   temp1=temp1->next;
  }
  else
  {
   temp3=temp1;
   temp1=temp1->next;
   temp2=temp2->next;
  }
  if(start==NULL)
  {
   current=temp3;
   start=temp3;
  }
  else
  {
   current->next=temp3;
   current=current->next;
  }
  if(temp1!=NULL)
  {
   current->next=temp1;
  }
  if(temp2!=NULL)
  {
   current->next=temp2;
  }
 }
}





void main()
{
 sll a,b,c;
 int ch;
 char choice;
 clrscr();
 do
 {
  cout<<"\nMENU....";
  cout<<"\n1.create";
  cout<<"\n2.display";
  cout<<"\n3.insert";
                cout<<"\na.at beg";
  cout<<"\n4.insert at end";
  cout<<"\n5.insert at middle";
  cout<<"\n6.delete at start";
  cout<<"\n7.delete at end";
  cout<<"\n8.delete at middle";
  cout<<"\n9.searching";
  cout<<"\n10.reverse";
  cout<<"\n11.Addition";
  cout<<"\n12.concatenation";
  cout<<"\n13.sort";
  cout<<"\n14.merge";
  cout<<"\nenter the choice:";
  cin>>ch;
  switch(ch)

  {
   case 1:
    a.create();
    a.display();
    break;
   case 2:
    a.display();
    break;
   case 3:
    a.insert_beg();
    a.display();
    break;
   case 4:
    a.insert_end();
    a.display();
    break;
   case 5:
    a.insert_mid();
    a.display();
    break;
   case 6:
    a.delete_beg();
    a.display();
    break;
   case 7:
    a.delete_end();
    a.display();
    break;
   case 8:
    a.delete_mid();
    a.display();
    break;
   case 9:
    a.search();
    break;
   case 10:
    a.reverse();
    a.display();
    break;
   case 11:
    a.addition();
    break;
   case 12:
    a.concate(b);
    a.display();
    break;
   case 13:
    a.sort();
    a.display();
    break;
   case 14:
    
    a.merge(b);
    a.display();
    break;
  }
  cout<<"\ndo u want to continue:";
  cin>>choice;
 }while(choice=='y'||choice=='Y');
 getch();

}


Hope you liked the Singly Linked List code. Please Let us know your feedback or any other questions. Cheers!!

No comments:

Post a Comment

Thanks for your valuable comment