D link list. 

#include<iostream>

#include<malloc.h>

using namespace std;

void inslast();

void insfirst();

void count();

void insmiddle();

void deletefirst();

void deletelast();

void deletemiddle();

void display();

void revdisplay();


struct dlist{

int sid;

struct dlist *next;

struct dlist *prev;

}*head,*last,*node,*temp;

int c1;


int main()

{

int ch;

while(1)

{

cout<<"\nPress 1 for insert at last: ";

cout<<"\npress 2 for insert at first: ";

cout<<"\npress 3 for count: ";

cout<<"\npress 4 for insert at iddle: ";

cout<<"\npress 5 for delete at first: ";

cout<<"\npress 6 for delete at last: ";

cout<<"\npress 7 for delete at middle: ";

cout<<"\npress 8 for display: ";

cout<<"\npress 9 for exit:";

cout<<"\nPress 10 for reverse display: ";

cout<<"\nEnter your choice :";

cin>>ch;

switch(ch)

{

case 1:

inslast();

break;

case 2:

insfirst();

break;

case 3:

count();

break;

case 4:

insmiddle();

break;

case 5:

deletefirst();

break;

case 6:

deletefirst();

break;

case 7:

deletemiddle();

break;

case 8:

display();

break;

case 10:

revdisplay();

break;

case 9:

exit(0);

break;

default :

cout<<"\nINVALID INPUT: ";

}

}

return 0;

}

void inslast()

{

node=(struct dlist*)malloc(sizeof(struct dlist));

cout<<"\nEnter student id: ";

cin>>node->sid;

node->next='\0';

node->prev='\0';

if(head=='\0')

{

head=node;

last=node;

}

else

{

last->next=node;

node->prev=last;

last=node;

}

}

void insfirst()

{

node=(struct dlist*)malloc(sizeof(struct dlist));

cout<<"\nEnter student id: ";

cin>>node->sid;

node->next=head;

node->prev='\0';

if(head=='\0')

{

head=node;

last=node;

}

else

{

node->next=head;

head->prev=node;

head=node;

}

}

void count()

{

c1=0;

temp=head;

while(temp!='\0')

{

c1++;

temp=temp->next;

}

}

void insmiddle()

{

int pos,c=1;

cout<<"\nEnter position: ";

cin>>pos;

count();

if(pos==1)

{

insfirst();

}

else if(pos==c1+1)

{

inslast();

}

else if(pos > c1+1 || pos < 1)

{

cout<<"\nNA";

return;

}

else

{

node=(struct dlist*)malloc(sizeof(struct dlist));

cout<<"\nEnter student id: ";

cin>>node->sid;

temp=head;

while(c != pos-1)

{

temp=temp->next;

c++;

}

node->next=temp->next;

node->prev=temp;

temp->next->prev=node;

temp->next=node;

}

}

void deletefirst()

{

if(head =='\0')

{

cout<<"\nList is empty: ";

return;

}

temp=head;

head=head->next;

if(head !='\0')

{

head->prev='\0';

}

else

{

last='\0';

}

cout<<"\nDeleted : "<<temp->sid;

free(temp);

}

void deletelast()

{

if(last=='\0')

{

cout<<"\nList is empty: ";

return;

}

temp=last;

last=last->prev;

if(last != '\0')

{

last->next='\0';

}

else

{

head='\0';

}

cout<<"\nDeleted"<<temp->sid;

free(temp);

}

void deletemiddle()

{

int pos,c=1;

cout<<"\nEnter position: ";

cin>>pos;

count();

if(pos==1)

{

deletefirst();

}

else if(pos==c1)

{

deletelast();

}

else if(pos>c1 || pos<1)

{

cout<<"\nNA ";

return;

}

else

{

temp=head;

while(c!=pos)

{

temp=temp->next;

c++;

}

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

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

cout<<"\nDELETED "<<temp->sid;

free(temp);

}

}

void display()

{

if(head=='\0')

{

cout<<"\nList is empty: ";

return;

}

temp=head;

while(temp != '\0')

{

cout<<temp->sid<<"-->";

temp=temp->next;

}

}