OOPC Linked List Using Stacks Code :
#include<iostream>
//using namespace std;
class node
{
public :
int d; //data
node *p; // contains the address of the next node
};
class linked
{
//using namespace std;
class node
{
public :
int d; //data
node *p; // contains the address of the next node
};
class linked
{
public :
node *start;
public :
linked()
{
start=NULL;
}
void insert_at_beg();
void insert_at_mid();
void insert_at_end();
int remove();
void display();
};
void linked :: insert_at_end()
{
node *temp;
if(start==NULL)
{
start=new node [1];
start->p=NULL;
cout<<"\n Enter Data to insert \n";
cin>>start->d;
}
else
{
temp=start;
while(temp->p!=NULL)
temp=temp->p;
temp->p= new node [1];
temp=temp->p;
cout<<"\n Enter Data to insert \n";
cin>>temp->d;
temp->p=NULL;
}
}
void linked :: insert_at_mid()
{
node *temp,*next;
int x;
temp=start;
cout<<"\n Enter the Neighbour element \n";
cin>>x;
while(temp->d!=x)
temp=temp->p;
next=temp->p;
temp->p=new node [1];
temp=temp->p;
temp->p=next;
cout<<"\n Enter data to insert \n";
cin>>temp->d;
}
void linked :: insert_at_beg()
{
node *temp;
temp=new node [1];
temp->p=start;
start=temp;
cout<<"\n Enter element to insert \n";
cin>>temp->d;
}
int linked :: remove()
{
node *temp,*prev;
int x;
if(start==NULL)
{
cout<<"\n Underflow -- No element to Delete \n";
return 0;
}
cout<<"\n Enter element to delete \n";
cin>>x;
if(start->d==x && start->p==NULL)
{
delete start;
start=NULL;
cout<<"\n Deletion successfull \n";
return 0;
}
if(start->d==x)
{
temp=start->p;
delete start;
start=temp;
cout<<"\n Deletion Successfull \n";
return 0;
}
temp=start;
while(temp->d!=x)
{
prev=temp;
temp=temp->p;
}
prev->p=temp->p;
cout<<"\n Deletion Successfull \n";
return x;
}
void linked :: display()
{
node *temp;
temp=start;
cout<<"\n Linked List elements are \n";
while(temp->p!=NULL)
{
cout<<""<<temp->d<<" ";
temp=temp->p;
}
cout<<temp->d<<endl;
}
int main()
{
int n=0,a;
linked l;
do
{
cout<<"\n ************** M E N U **************\n";
cout<<"\n1.Insert at beginning\n2.Insert at middle\n3.Insert at end\n4.Delete\n5.Display elements";
cout<<"\n6.Exit\n";
cout<<"Enter option \n";
cin>>a;
switch(a)
{
case 1:
l.insert_at_beg();
break;
case 2:
l.insert_at_mid();
break;
case 3:
l.insert_at_end();
break;
case 4:
l.remove();
break;
case 5:
l.display();
break;
case 6:
n=1;
break;
default :
cout<<"\n Invalid Entry \n";
break;
}
}while(n!=1);
return 0;
}
node *start;
public :
linked()
{
start=NULL;
}
void insert_at_beg();
void insert_at_mid();
void insert_at_end();
int remove();
void display();
};
void linked :: insert_at_end()
{
node *temp;
if(start==NULL)
{
start=new node [1];
start->p=NULL;
cout<<"\n Enter Data to insert \n";
cin>>start->d;
}
else
{
temp=start;
while(temp->p!=NULL)
temp=temp->p;
temp->p= new node [1];
temp=temp->p;
cout<<"\n Enter Data to insert \n";
cin>>temp->d;
temp->p=NULL;
}
}
void linked :: insert_at_mid()
{
node *temp,*next;
int x;
temp=start;
cout<<"\n Enter the Neighbour element \n";
cin>>x;
while(temp->d!=x)
temp=temp->p;
next=temp->p;
temp->p=new node [1];
temp=temp->p;
temp->p=next;
cout<<"\n Enter data to insert \n";
cin>>temp->d;
}
void linked :: insert_at_beg()
{
node *temp;
temp=new node [1];
temp->p=start;
start=temp;
cout<<"\n Enter element to insert \n";
cin>>temp->d;
}
int linked :: remove()
{
node *temp,*prev;
int x;
if(start==NULL)
{
cout<<"\n Underflow -- No element to Delete \n";
return 0;
}
cout<<"\n Enter element to delete \n";
cin>>x;
if(start->d==x && start->p==NULL)
{
delete start;
start=NULL;
cout<<"\n Deletion successfull \n";
return 0;
}
if(start->d==x)
{
temp=start->p;
delete start;
start=temp;
cout<<"\n Deletion Successfull \n";
return 0;
}
temp=start;
while(temp->d!=x)
{
prev=temp;
temp=temp->p;
}
prev->p=temp->p;
cout<<"\n Deletion Successfull \n";
return x;
}
void linked :: display()
{
node *temp;
temp=start;
cout<<"\n Linked List elements are \n";
while(temp->p!=NULL)
{
cout<<""<<temp->d<<" ";
temp=temp->p;
}
cout<<temp->d<<endl;
}
int main()
{
int n=0,a;
linked l;
do
{
cout<<"\n ************** M E N U **************\n";
cout<<"\n1.Insert at beginning\n2.Insert at middle\n3.Insert at end\n4.Delete\n5.Display elements";
cout<<"\n6.Exit\n";
cout<<"Enter option \n";
cin>>a;
switch(a)
{
case 1:
l.insert_at_beg();
break;
case 2:
l.insert_at_mid();
break;
case 3:
l.insert_at_end();
break;
case 4:
l.remove();
break;
case 5:
l.display();
break;
case 6:
n=1;
break;
default :
cout<<"\n Invalid Entry \n";
break;
}
}while(n!=1);
return 0;
}