-------------------------------------------------------------------------------------------------------------------
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 ....");
      }
 }