Monday, 18 September 2017

Doubly Link List

-------------------------------------------------------------------------------------------------------------------
Doubly link list
Create a node and insert and delete ,frist,last,middle,specific position


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

struct node
{
int data;
struct node *next,*prev;

} ;
struct node *head=NULL  , *newnode,*temp=NULL,*q,*s;
voiddeletelast();
voiddeletefirst();
voiddeletemid();
voiddeletesp();
voidinsertfirst();
voidinsertlast();
voidinsertmid();
voidinsertsp();

voidcreatenode();
void display();

void main()
{
intch;
            clrscr();
            do
             {
            printf("\n\t1 . Insert at first \t");
            printf("  \t2 . Insert at last \t");
            printf("\n\t3 . Insert at middel \t");
            printf("  \t4 . Insert at specific location \t");
            printf("\n\t5 . LIST Display..\t ");
            printf("  \t6 . Delete from first \t");
            printf("\n\t7.  Delete from last \t");
            printf("  \t8 . Delete from middel \t");
            printf("\n\t9 . Delete from specific location \t");

            printf(" \n\t10 . *..........Exit................ ");

            printf("\n\n\t\t Enter your choice............ ");
            scanf("%d",&ch);
            switch(ch)
              {
            case 1:createnode();
                        insertfirst();
                        printf("\nNode inserted Sucessfully \n");
                        break;
            case 2:createnode();
                        insertlast();
                        printf("\nNode inserted Sucessfully \n");
                        break;

            case 3:createnode();
                        insertmid();
                        printf("\nNode inserted Sucessfully \n");
                        break;
            case 4:createnode();
                        insertsp();
                        break;
            case 5:display();
                        printf("\n\n");
                        break;
            case 6:deletefirst();
                        printf("\n\n");
                        break;

            case 7:deletelast();
                        printf("\n\n");
                        break;
            case 8:deletemid();
                        printf("\n\n");
                        break;
            case 9:deletesp();
                        printf("\n\n");
                        break;
            case 10:exit(0);
            default  :printf("\n\n Re enter u r choice .......");


                          }
            }while(1);
getch();
}
//------------------------------------------------------------------------------------------
voidcreatenode()
{
newnode= (struct node * )(malloc) (sizeof (struct node));
newnode->next=NULL;
newnode->prev=NULL;    //<------------------
printf(" Enter data ");
scanf("%d",&newnode->data);
}

voidinsertfirst()
{
if(head==NULL)
     {
head=newnode;
     }
else
      {    newnode->next=head;
            head->prev=newnode;   //<---------------
            head=newnode;
      }
 }
//------------------------------------------------------------------------------------------
voidinsertlast()
{
if(head==NULL)
     {
head=newnode;
     }
else
      {
temp=head;

            while(temp->next!=NULL)    //reach to last node
                 {
            temp=temp->next;
                 }

temp->next=newnode;         //connect newnode
newnode->prev=temp;
      }
 }
voidinsertmid()
{
intcnt=1,m,i=1;
if(head==NULL)
     {
head=newnode;
     }
else
      {
temp=head;

            while(temp->next!=NULL)    //reach to last node
                 {
            cnt++;
            temp=temp->next;
                 }
            temp=head;
                   m=cnt/2;
            while(i<m)
                   {
                        temp=temp->next;
                        i++;
                   }
                q=temp->next;
                q->prev=temp;
            temp->next=newnode;
            newnode->prev=temp;         //connect newnode
            newnode->next=q;
               q->prev=newnode;
      }
 }
//----------------------------------------------------------------------------------------------------
voidinsertsp()
{
intcnt=1,p,i=1;
printf("\n\n Enter postion ");
scanf("%d",&p);

if(head==NULL)
     {
printf("List is empty ...........");
     }
else
      {
temp=head;

            while(temp->next!=NULL)    //count nodes
                 {
            cnt++;
            temp=temp->next;
                 }

            if(p>1&&p<cnt)
                 {
            temp=head;
            while(i<p)
                   {
                        temp=temp->next;
                        i++;
                   }
                  q=temp->next;
                q->prev=temp;
            temp->next=newnode;
            newnode->prev=temp;         //connect newnode
            newnode->next=q;
               q->prev=newnode;
            printf("\nNode inserted Sucessfully \n");
                  }
            else
            printf("\n\n plzreEnterpostion ....");
      }
 }
//--------------------------------------------------------------------------------------------------
void display()
{
struct node *temp ;
temp=head;
if(head==NULL)
printf("XXXXXX.............LIST IS EMPTY...........XXXXX");
else{
while(temp!=NULL)
{   printf("%d      ",temp->data);
temp=temp->next;
}
}
}

//----------------------------------------------------------------------------------------------
voiddeletefirst()
{
if (head==NULL)
printf("\n\n List is empty .......................");
else
 {
temp=head;
head=temp->next;
temp->prev=head   ;
printf(" Deleted node is---- %d----",temp->data);

free(temp);

  }
}
//-------------------------------------------------------------------------------------------------
voiddeletelast()
{
if (head==NULL)
printf("\n\n List is empty .......................");
else
 {
temp=head;
while(temp->next->next!=NULL)
 {
temp=temp->next;
 }
 q=temp->next;
 q->prev=temp;
printf(" Deleted node is---- %d----",q->data);

free(q);
temp->next=NULL;
  }
}
//----------------------------------------------------------------------------------------------------
voiddeletemid()
{
intcnt=1,m,i=1;
if(head==NULL)
     {
printf("\n\n List is empty .............");
     }
else
      {
temp=head;

            while(temp->next!=NULL)
                {
            cnt++;
            temp=temp->next;
                 }
            temp=head;
                   m=cnt/2;
            while(i<m)
                   {
                        temp=temp->next;
                        i++;
                   }
                q=temp->next;
                q->prev=temp;
                s=q->next;
                q->prev=s;
            printf("\n\n Deleted Node is   %d  ",q->data);
            free(q);
            temp->next=s;
            s->prev=temp;

      }
 }
//--------------------------------------------------------------------------------------------------
voiddeletesp()
{
intcnt=1,p,i=1;
printf("\n\n Enter postion ");
scanf("%d",&p);

if(head==NULL)
     {
printf("List is empty ...........");
     }
else
      {
temp=head;

            while(temp->next!=NULL)    //count nodes
                 {
            cnt++;
            temp=temp->next;
                 }

            if(p>1&&p<cnt)
                 {
            temp=head;
            while(i<p)
                   {
                        temp=temp->next;
                        i++;
                   }

                q=temp->next;
                q->prev=temp;
                s=q->next;
            s->prev=q;
            printf("\n\n Deleted Node is   %d  ",q->data);
            free(q);
            temp->next=s;
            s->prev=temp;
                 }
            else
            printf("\n\n plzreEnterpostion ....");
      }
 }



Ebook

Ebook
Ebook