Monday, 18 September 2017

Doubly Circular Link List

-------------------------------------------------------------------------------------------------------------------
Doubly  circular 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,*last,*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=newnode;
newnode->prev=newnode;
printf(" Enter data ");
scanf("%d",&newnode->data);
}

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

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

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

            while(temp->next!=head)    //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!=head)    //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{

do
{   printf("%d      ",temp->data);
temp=temp->next;
}  while(temp!=head) ;
}
}


//-------------------------------------------------------------------------------------------
voiddeletefirst()
{
if (head==NULL)
printf("\n\n List is empty .......................");
else
 {
temp=head;
last=head->prev ;
last->next= head;

head=temp->next;
head->prev=temp   ;

printf(" Deleted node is---- %d----",temp->data);

free(temp);

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

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

            while(temp->next!=head)
                {
            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!=head)    //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