Referred From :  PRITHVIRAJ JAIN



#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int choice,i,n;
struct node
{
    int ssn;
    char name[20],empid[10],desig[20],dep[20];
    float salary;
    struct node *prev;
    struct node *next;
}*start=NULL,*last=NULL,*ptr,*new,*cur;
void create()
{
    int ssn;
    char name[20],empid[10],desig[20],dep[20];
    float salary;
    printf("ENTER THE EMPLOYEE NAME,ID,DESIGNATION,DEPARTMENT,SSN,SALARY :\n");
    scanf("%s%s%s%s%d%f",name,empid,desig,dep,&ssn,&salary);
    new=(struct node *)malloc(sizeof(struct node));
    new->prev=NULL;
    new->next=NULL;
    strcpy(new->name,name);
    strcpy(new->empid,empid);
    strcpy(new->desig,desig);
    strcpy(new->dep,dep);
    new->ssn=ssn;
    new->salary=salary;
}
void insertbeg()
{
    create();
    if(start==NULL)
    {
        start=new;
        last=new;
    }
    else
    {
        new->next=start;
        start->prev=new;
        start=new;
    }
}
void insertend()
{
    create();
    if(start==NULL)
    {
        start=new;
        last=new;
    }
    else
    {
        last->next=new;
        new->prev=last;
        last=new;
    }
}
void display()
{
    int count=0;
    if(start==NULL)
    printf("LIST IS EMPTY\n");
    else
    {
        ptr=start;
        printf("THE EMPLOYEE DETAILS ARE :\n");
        printf("NAME\tEMP ID\tDESIGNATION\tDEPARTMENT\tSSN\tSALARY\n");
        while(ptr!=NULL)
        {
            printf("%s\t%s\t%s\t%s\t\t%d\t%.2f\n",ptr->name,ptr->empid,ptr->desig,ptr->dep,ptr->ssn,ptr->salary);
            ptr=ptr->next;
            count++;
        }
        printf("THE NO. OF NODES PRESENT IS :%d\n",count);
    }
}
void deldis(struct node *ptr)
{
    printf("THE DELETED EMPLOYEE DETAILS ARE :\n");  
    printf("NAME\tEMP ID\tDESIGNATION\tDEPARTMENT\tSSN\tSALARY\n");
    printf("%s\t%s\t%s\t%s\t\t%d\t%.2f\n",ptr->name,ptr->empid,ptr->desig,ptr->dep,ptr->ssn,ptr->salary);
}
void deletebeg()
{
    if(start==NULL)
    {
    printf("NOTHING TO DELETE\n");
    return;
    }
    else if(start->next==NULL)
    {
        ptr=start;
        start=NULL;
        last=NULL;
    }
    else
    {
        ptr=start;
        start=start->next;
        start->prev=NULL;
    }
    deldis(ptr);
    free(ptr);
}
void deleteend()
{
    if(start==NULL)
    {
    printf("NOTHING TO DELETE\n");
    return;
    }
    else if(start->next==NULL)
    {
        ptr=start;
        start=NULL;
        last=NULL;
    }
    else
    {
        ptr=last;
        last=last->prev;
        last->next=NULL;
    }
    deldis(ptr);
    free(ptr);
}
void displayrev()
{
    int count=0;
    if(last==NULL)
    printf("LIST IS EMPTY\n");
    else
    {
        ptr=last;
        printf("THE EMPLOYEE DETAILS ARE :\n");
        printf("NAME\tEMP ID\tDESIGNATION\tDEPARTMENT\tSSN\tSALARY\n");
        while(ptr!=NULL)
        {
            printf("%s\t%s\t%s\t%s\t\t%d\t%.2f\n",ptr->name,ptr->empid,ptr->desig,ptr->dep,ptr->ssn,ptr->salary);
            ptr=ptr->prev;
            count++;
        }
        printf("THE NO. OF NODES PRESENT IS :%d\n",count);
    }
}
void search()
{
    int key;
    printf("ENTER THE SSN TO BE SEARCHED\n");
    scanf("%d",&key);
    ptr=start;
    while(ptr!=NULL)
    {
        if(ptr->ssn==key)
        {
            printf("THE EMPLOYEE DETAILS ARE :\n");
            printf("NAME\tEMP ID\tDESIGNATION\tDEPARTMENT\tSSN\tSALARY\n");
            printf("%s\t%s\t%s\t%s\t\t%d\t%.2f\n",ptr->name,ptr->empid,ptr->desig,ptr->dep,ptr->ssn,ptr->salary);
            return;
        }
        ptr=ptr->next;
    }
    printf("SEARCH UNSUCCESSFUL\n");
}  
void deletesec()
{
    if((start==NULL)||(start->next==NULL))
    {
    printf("UNABLE TO DELETE\n");
    return;
    }
    ptr=start->next;
    if(ptr->next==NULL)
    {
        start->next=NULL;
        last=start;
    }
    else
    {
        cur=ptr->next;
        start->next=cur;
        cur->prev=start;
    }
    deldis(ptr);
    free(ptr);
}              
void main()
{
    while(1)
    {
        printf("------MENU-------\n1. INSERT N EMPLOYEE DETAILS\n");
        printf("2. INSERT DETAILS AT BEGINNING\n3. INSERT DETAILS AT END\n");
        printf("4. DELETE AT THE BEGINNING\n5. DELETE AT THE END\n");
        printf("6. DISPLAY\n7. DISPLAY REVERSE\n8. SEARCH\n");
        printf("9. DELETE SECOND NODE\n10. EXIT\nENTER YOUR CHOICE :\n");
        scanf("%d",&choice);
        switch(choice)
        {
            case 1:printf("ENTER THE NO. OF EMPLOYEES :\n");
                scanf("%d",&n);
                for(i=0;i<n;i++)
                insertend();
                break;
            case 2:insertbeg();
                break;
            case 3:insertend();
                break;
            case 4:deletebeg();
                break;
            case 5:deleteend();
                break;
            case 6:display();
                break;
            case 7:displayrev();
                break;
            case 8:search();
                break;
            case 9:deletesec();
                break;
            case 10:exit(0);
            default:printf("INVALID CHOICE \n");
        }
    }
}




Referred From :  GURUPRASAD M S




#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void read();
void insertatfront();
void deleteatfront();
void insertatend();
void deleteatend();
void display();


struct node
{
char ssn[20],name[20],dept[20],desg[20];
float sal;
int ph;
struct node* right;
struct node* left;
}*root=NULL,*temp=NULL,*cur=NULL,*pre=NULL,*p=NULL;


void main()
{
int ch,n;
while(1)
{
printf("\n************MENU**************");
printf("\n\n1.CREATE A DLL OF N EMPLOYEES DATA BY USING END INSERTION\n2.INSERT AT FRONT\n3.DELETE AT FRONT\n4.INSERT AT END\n5.DELETE AT END\n6.DISPLAY\n7.EXIT\n\nEnter your choice\n");
scanf("%d",&ch);
switch(ch)
{

case 1:printf("Enter the Number of Employees\n");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
insertatend();
}
break;
case 2:insertatfront();break;
case 3:deleteatfront();break;
case 4:insertatend();break;
case 5:deleteatend();break;
case 6:display();break;
case 7:exit(0);
default:printf("*******ENTER A VALID CHOICE*******\n");
}
}
}

void read()
{
char ssn[20],name[20],dept[20],desg[20];
float sal;
int ph;
temp=root;
temp=(struct node*)malloc(sizeof(struct node));
temp->right=NULL;
temp->left=NULL;
printf("\nENTER THE SSN,NAME,DEPARTMENT,DESIGNATION,SALARY,PHONE NO OF EMPLYOEE\n");
scanf("%s %s %s %s %f %d",ssn,name,dept,desg,&sal,&ph);
strcpy(temp->ssn,ssn);
strcpy(temp->name,name);
strcpy(temp->dept,dept);
strcpy(temp->desg,desg);
temp->sal=sal;
temp->ph=ph;
}

void insertatfront()
{
read();
if(root==NULL)
root=temp;
else
{
temp->right=root;
root->left=temp;
root=temp;
}
}

void display()
{
int num=0;
temp=root;
if(root==NULL)
{
printf("\nEMPLYOEE DETAILS NOT FOUND\n");
}
else
{
printf("DETAILS OF EMPLOYEE:\n");
while(temp!=NULL)
{
printf("%s %s %s %s %f %d \n",temp->ssn,temp->name,temp->dept,temp->desg,temp->sal,temp->ph);
temp=temp->right;
num=num+1;
}
printf("NUMBER OF NODES=%d\n",num);
}
}

void deleteatfront()
{
cur=root;
if(root==NULL)
{
printf("\n*******EMPLOYEE DETAILS NOT FOUND********\n");
return;
}
else if(root->right==NULL)
{
root=NULL;
}
else
{
root=root->right;
root->left=NULL;
}
printf("DETAILS OF DELETED EMPLOYEE:\n");
printf("%s %s %s %s %f %d \n",cur->ssn,cur->name,cur->dept,cur->desg,cur->sal,cur->ph);
free(cur);

}


void insertatend()
{
read();
if(root==NULL)
{
root=temp;
}
else
{
p=root;
while(p->right!=NULL)
{
p=p->right;
}
p->right=temp;
temp->left=p;
}
}


void deleteatend()
{
if(root==NULL)
{
printf("\n**********EMPLOYEE DETAILS NOT FOUND*********\n");
return;
}
else if(root->right==NULL)
{
cur=root;
root=NULL;
}
else
{
cur=root;
while(cur->right!=NULL)
{
pre=cur;
cur=cur->right;
}
pre->right=NULL;
}
printf("\nDETAILS OF DELETED EMPLOYEE:\n");
printf("%s %s %s %s %f %d \n",cur->ssn,cur->name,cur->dept,cur->desg,cur->sal,cur->ph);
free(cur);
}