SINGLY LINKED LIST (C++ CODE):
Hope you liked the Singly Linked List code. Please Let us know your feedback or any other questions. Cheers!!
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