Doubly Linked List program using C language
Operations: - Create List, insertion (beg, mid, end) deletion (beg, mid, end), Traverse
#include<stdio.h>#include<conio.h>
void inst_beg();
void inst_mid();
void inst_end();
void del_beg();
void del_mid();
void del_end();
void traverse();
void reverse();
int count();
struct node
{ int num;
struct node *next;
struct node *prev;
}*start=NULL,*last=NULL;
typedef struct node node;
typedef struct node* nptr;
void main()
{ char choice;
while(1)
{
clrscr();
printf("-------LINKED LIST-------\n\n");
printf(" 1.Insertion at begining\n");
printf(" 2.Insertion at mid\n");
printf(" 3.Insertion at end\n");
printf(" 4.Deletion from begining\n");
printf(" 5.Deletion from mid\n");
printf(" 6.Deletion from end\n");
printf(" 7.Traverse\n");
printf(" 8.Traverse in reverse order\n");
printf(" 9.Exit\n\n");
printf(" Enter your choice: ");
fflush(stdin);
scanf("%c",&choice);
switch(choice)
{ case '1': inst_beg();
break;
case '2': inst_mid();
break;
case '3': inst_end();
break;
case '4': del_beg();
break;
case '5': del_mid();
break;
case '6': del_end();
break;
case '7': traverse();
break;
case '8': reverse();
break;
case '9': exit(0);
default: printf("\n\ninvalid choice");
}
getch();
}
}
void inst_beg()
{ int item;
nptr p;
p=(nptr)malloc(sizeof(node));
printf("\nenter the item: ");
scanf("%d",&item);
p->num=item;
if(start==NULL)
{ start=last=p;
p->prev=NULL;
p->next=NULL;
}
else
{ p->next=start;
start->prev=p;
p->prev=NULL;
start=p;
}
}
void inst_end()
{ int item;
nptr p;
p=(nptr)malloc(sizeof(node));
printf("\nenter the item: ");
scanf("%d",&item);
p->num=item;
if(start==NULL)
{ start=last=p;
p->prev=NULL;
p->next=NULL;
}
else
{ p->next=NULL;
p->prev=last;
last->next=p;
last=p;
}
}
void inst_mid()
{ int item,i=1,pos,res;
nptr p,q;
p=(nptr)malloc(sizeof(node));
printf("\n\nenter position for insertion: ");
scanf("%d",&pos);
res=count();
if(pos<=1||pos>res)
{ printf("\n\ninsertion not possible");
}
else
{
printf("\nenter the item: ");
scanf("%d",&item);
p->num=item;
q=start;
while(i<pos-1)
{ q=q->next;
i++;
}
p->next=q->next;
q->next=p;
p->prev=q;
}
}
int count()
{ int c=0;
nptr p;
p=start;
while(p!=NULL)
{ p=p->next;
c++;
}
return c;
}
void del_beg()
{ nptr p;
if(start==NULL)
{ printf("\n\nlinked list is empty");
}
if(start==last)
{ p=start;
start=last=NULL;
printf("\n %d is deleted",p->num);
free(p);
}
else
{ nptr p;
p=start;
start=start->next;
start->prev=NULL;
printf("\ndeleted node: %d",p->num);
free(p);
}
}
void del_end()
{ nptr p;
if(start==NULL)
{ printf("\n\nlinked list is empty");
}
if(start==last)
{ p=start;
start=last=NULL;
printf("\n %d is deldeted",p->num);
free(p);
}
else
{ p=last;
last->prev->next=NULL;
last=last->prev;
printf("\n%d is deleted",p->num);
free(p);
}
}
void del_mid()
{ int i=1,pos,res;
nptr p,q;
if(start==NULL)
{ printf("\n\nempty");
}
else
{
printf("\nenter position: ");
scanf("%d",&pos);
p=q=start;
res=count();
if(pos<=2||pos>=res)
{ printf("\n\nDeletion is not possible");
}
else
{
while(i<pos)
{q=p;
p=p->next;
i++;
}
q->next=p->next;
p->next->prev=q;
printf("deleted node: %d",p->num);
free(p);
}
}
}
void traverse()
{ if(start==NULL)
{ printf("\nempty");
}
else
{ nptr p;
p=start;
while(p!=NULL)
{ printf(" %d",p->num);
p=p->next;
}
}
}
void reverse()
{ if(start==NULL)
{ printf("\nempty");
}
else
{ nptr p;
p=last;
while(p!=NULL)
{ printf(" %d",p->num);
p=p->prev;
}
}
}
Comments
Post a Comment