#include<conio.h>
#include<stdio.h>
struct doubly
{
struct doubly *front;
struct doubly *back;
int i;
};
void main()
{
struct doubly *head=0;
struct doubly *last=0;
struct doubly *p=0;
struct doubly *temp=0;
int ch,intch,user,cnt=0,t,add;
clrscr();
printf("\n\t 1. CREATE.");
printf("\n\t 2. INSERT.");
printf("\n\t 3. DELETE.");
printf("\n\t 4. DISPLAY.");
printf("\n\t 5.EXIT.");
scanf("%d",&ch);
while(ch!=5)
{
if(ch==1)
{
cnt=0;
head=(struct doubly *)malloc(sizeof(struct doubly));
head->back=0;
head->front=0;
printf("\n\t ENTER DATA::: ");
scanf("%d",&head->i);
cnt++;
last=head;
}
if(ch==2)
{
printf("\n\t 1. INSERTION AT FRONT.");
printf("\n\t 2. INSERTION AT MIDDLE.");
printf("\n\t 3. INSERTION AT END.");
scanf("%d",&intch);
temp=(struct doubly *)malloc(sizeof(struct doubly));
printf("\n\t ENTER DATA:::");
scanf("%d",&temp->i);
if(intch==1)
{
temp->front=0;
temp->back=head;
head=temp;
cnt++;
}
if(intch==3)
{
p=head;
while(p->back!=0)
{
p=p->back;
}
temp->back=0;
temp->front=p;
p->back=temp;
cnt++;
}
if(intch==2)
{
printf("\n\tNTER VALUE BETVN 1--%d",cnt);
scanf("%d",&add);
t=1;
p=head;
while(t<add)
{
p=p->back;
t++;
}
temp->back=p->back;
p->back->front=temp;
p->back=temp;
temp->front=p;
}
}
if(ch==4)
{
p=head;
while(p!=0)
{
printf("\t-->%d",p->i);
p=p->back;
}
printf("\n\t total nodes %d",cnt);
}
if(ch==3)
{
printf("\n\t1. DELETE FRONT");
printf("\n\t2. DELETE MIDDLE");
printf("\n\t3. DELETE END");
scanf("%d",&intch);
if(intch==1)
{
head->back=t;
free(head);
head=t;
head->front=0;
cnt--;
}
if(intch==3)
{
p=head;
while(p->back!=0)
{
p=p->back;
}
temp->front=p;
p->back=temp;
temp->back=0;
cnt--;
}
if(intch==2)
{
printf("\n\tNTER VALUE BETVN 1--%d",cnt);
scanf("%d",&add);
t=1;
p=head;
while(t<(add-1))
{
p=p->back;
t++;
}
temp=p->back;
p->back=temp->back;
temp->back->front=p;
free(temp);
}
}
printf("\n\t 2. INSERT.");
printf("\n\t 3. DELETE.");
printf("\n\t 4. DISPLAY.");
printf("\n\t 5.EXIT.");
scanf("%d",&ch);
}
getch();
}