Dlink program - Computer Programming

Latest

C C++ Java Python Perl Programs Examples with Output -useful for Schools & College Students

Monday, April 4, 2011

Dlink program


#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>

struct node
{
   struct node *llink;
   struct node *rlink;
   int data;
};

int count(struct node *q)
{
   struct node *temp;
   temp=q;
   int i=0;
   while(temp!=NULL)
   {
 temp=temp->rlink;
 i++;
   }
   return i;
}

void addatbeg(struct node **q)
{
   struct node *temp;
   int data;
   temp=*q;
   cout<<"\nEnter data to be inserted";
   cin>>data;
   if(temp==NULL)
   {
// cout<<"\nLinked list is empty ";
 temp=(struct node *)(malloc(sizeof(struct node)));
 temp->data=data;
 temp->llink=NULL;
 temp->rlink=NULL;
 *q=temp;
   }
   else
   {
 struct node *temp1;
 temp1=(struct node *)(malloc(sizeof(struct node)));

 temp1->data=data;
 temp1->llink=NULL;
 temp1->rlink=temp;
 temp->llink=temp1;
 *q=temp1;
   }
}

void addatend(struct node **q)
{
   struct node *temp;
   int data;
   cout<<"\nEnter data : ";
   cin>>data;
   temp=*q;
   if(temp==NULL)
   {
// cout<<"\nLinked list is empty ";
 temp=(struct node *)(malloc(sizeof(struct node)));
 temp->data=data;
 temp->llink=NULL;
 temp->rlink=NULL;
 *q=temp;
 return;
   }
   while(temp->rlink!=NULL)
 temp=temp->rlink;
   struct node *temp1;
   temp1=(struct node *)(malloc(sizeof(struct node)));;
   temp1->data=data;
   temp1->llink=temp;
   temp1->rlink=NULL;
   temp->rlink=temp1;
}

void add(struct node **q)
{
   int data,loc;
   cout<<"\nEnter data n location to insert node : ";
   cin>>data>>loc;
   if(loc<1||loc>count(*q))
   {
 cout<<"\nNode doesn't exist!!";
 getch();
 return;
   }
   if(loc==count(*q))
   {
      addatend(q);
      return;
   }
   if(loc==1)
   {
      addatbeg(q);
      return;
   }  
   struct node *temp,*temp1,*temp2;
   temp=*q;

   while(loc!=1)
   {
 temp=temp->rlink;
 loc--;
   }
   temp2=(struct node *)(malloc(sizeof(struct node)));;
   temp1=temp->rlink;
   temp2->data=data;
   temp2->llink=temp;
   temp2->rlink=temp1;
   temp->llink=temp2;
   temp->rlink=temp2;
   temp1->llink=temp2;

}



void del(struct node **q)
{
   int loc;
   cout<<"\nEnter node no. to delete : ";
   cin>>loc;
   if(loc==0||loc>count(*q))
   {
      cout<<"\nNode doesn't exist!!";
      getch();
      return;
   }  
   struct node *temp;
   temp=*q;
   if(loc==1)
   {
 *q=temp->rlink;
 cout<<"\nData deleted : "<<temp->data;
 delete(temp);
 return;
   }
   if(loc==count(*q))
   {
 while(loc!=2)
 {
temp=temp->rlink;
loc--;
 }
 struct node *temp1;
 temp1=temp->rlink;
 cout<<"\nData deleted : "<<temp1->data;
 delete(temp1);
 temp->rlink=NULL;
 return;
   }
   else
   {
 while(loc!=2)
 {
temp=temp->rlink;
loc--;
 }
 struct node *temp1,*temp2;
 temp1=temp->rlink;
 temp2=temp1->rlink;
 cout<<"\nData deleted : "<<temp1->data;
 delete(temp1);
 temp->rlink=temp2;
 temp2->llink=temp;
   }

}

void display(struct node **q)
{
   struct node *temp;
   temp=*q;
   while(temp!=NULL)
   {
 cout<<" "<<temp->data;
 temp=temp->rlink;
   }
}


int main()
{
   //clrscr();
   struct node *head;
   head=NULL;
   int oprn;
   while(1)
   {
 cout<<"\nEnter oprn(0:exit,1:addat beg,2:addat end,3:add anywhere,4:delete,5:count,6:Display) : ";
 cin>>oprn;
 switch(oprn)
 {
case 0:
  exit(0);
case 1:
  addatbeg(&head);
  break;
case 2:
  addatend(&head);
  break;
case 3:
  add(&head);
  break;
case 4:
  del(&head);
  break;
case 5:
  cout<<"\nNo. of nodes = "<<count(head);
  break;
case 6:
  display(&head);
default:
  continue;
}
   }
   return 0;
}

No comments:

Post a Comment