0% found this document useful (0 votes)
5 views

ads double linked list

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views

ads double linked list

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

/*P3.

2 Program of doubly linked list*/

#include<stdio.h>
#include<stdlib.h>

struct node
{
struct node *prev;
int info;
struct node *next;
};

struct node *create_list(struct node *start);


void display(struct node *start);
struct node *addtoempty(struct node *start,int data);
struct node *addatbeg(struct node *start,int data);
struct node *addatend(struct node *start,int data);
struct node *addafter(struct node *start,int data,int item);
struct node *addbefore(struct node *start,int data,int item);
struct node *del(struct node *start,int data);
struct node *reverse(struct node *start);

main()
{
int choice,data,item;
struct node *start=NULL;
while(1)
{
printf("1.Create List\n");
printf("2.Display\n");
printf("3.Add to empty list\n");
printf("4.Add at beginning\n");
printf("5.Add at end\n");
printf("6.Add after\n");
printf("7.Add before\n");
printf("8.Delete\n");
printf("9.Reverse\n");
printf("10.Quit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
start=create_list(start);
break;
case 2:
display(start);
break;
case 3:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addtoempty(start,data);
break;
case 4:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatbeg(start,data);
break;
case 5:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatend(start,data);
break;
case 6:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
printf("Enter the element after which to
insert : ");
scanf("%d",&item);
start=addafter(start,data,item);
break;
case 7:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
printf("Enter the element before which to
insert : ");
scanf("%d",&item);
start=addbefore(start,data,item);
break;
case 8:
printf("Enter the element to be deleted : ");
scanf("%d",&data);
start=del(start,data);
break;
case 9:
start=reverse(start);
break;
case 10:
exit(1);
default:
printf("Wrong choice\n");
}/*End of switch*/
}/*End of while*/
}/*End of main()*/

struct node *create_list(struct node *start)


{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
start=NULL;
if(n==0)
return start;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addtoempty(start,data);

for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatend(start,data);
}
return start;
}/*End of create_list()*/

void display(struct node *start)


{
struct node *p;
if(start==NULL)
{
printf("List is empty\n");
return;
}
p=start;
printf("List is :\n");
while(p!=NULL)
{
printf("%d ",p->info);
p=p->next;
}
printf("\n");
}/*End of display() */

struct node *addtoempty(struct node *start,int data)


{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->prev=NULL;
tmp->next=NULL;
start=tmp;
return start;
}/*End of addtoempty( )*/

struct node *addatbeg(struct node *start,int data)


{
struct node *tmp;
tmp = (struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->prev=NULL;
tmp->next=start;
start->prev=tmp;
start=tmp;
return start;
}/*End of addatbeg( )*/

struct node *addatend(struct node *start,int data)


{
struct node *tmp,*p;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
p=start;
while(p->next!=NULL)
p=p->next;
p->next=tmp;
tmp->next=NULL;
tmp->prev=p;
return start;
}/*End of addatend( )*/

struct node *addafter(struct node *start,int data,int item)


{
struct node *tmp,*p;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
p=start;
while(p!=NULL)
{
if(p->info==item)
{
tmp->prev=p;
tmp->next=p->next;
if(p->next!=NULL)
p->next->prev=tmp;
p->next=tmp;
return start;
}
p=p->next;
}
printf("%d not present in the list\n\n",item);
return start;
}/*End of addafter()*/

struct node *addbefore(struct node *start,int data,int item)


{
struct node *tmp,*q;
if(start==NULL )
{
printf("List is empty\n");
return start;
}
if(start->info==item)
{
tmp = (struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->prev=NULL;
tmp->next=start;
start->prev=tmp;
start=tmp;
return start;
}
q=start;
while(q!=NULL)
{
if(q->info==item)
{
tmp=(struct node *)malloc(sizeof(struct
node));
tmp->info=data;
tmp->prev=q->prev;
tmp->next = q;
q->prev->next=tmp;
q->prev=tmp;
return start;
}
q=q->next;
}
printf("%d not present in the list\n",item);
return start;
}/*End of addbefore()*/

struct node *del(struct node *start,int data)


{
struct node *tmp;
if(start==NULL)
{
printf("List is empty\n");
return start;
}
if(start->next==NULL) /*only one node in the list*/
if(start->info==data)
{
tmp=start;
start=NULL;
free(tmp);
return start;
}
else
{
printf("Element %d not found\n",data);
return start;
}
/*Deletion of first node*/
if(start->info==data)
{
tmp=start;
start=start->next;
start->prev=NULL;
free(tmp);
return start;
}
/*Deletion in between*/
tmp=start->next;
while(tmp->next!=NULL )
{
if(tmp->info==data)
{
tmp->prev->next=tmp->next;
tmp->next->prev=tmp->prev;
free(tmp);
return start;
}
tmp=tmp->next;
}
/*Deletion of last node*/
if(tmp->info==data)
{
tmp->prev->next=NULL;
free(tmp);
return start;
}
printf("Element %d not found\n",data);
return start;
}/*End of del()*/

struct node *reverse(struct node *start)


{
struct node *p1,*p2;
p1=start;
p2=p1->next;
p1->next=NULL;
p1->prev=p2;
while(p2!=NULL)
{
p2->prev=p2->next;
p2->next=p1;
p1=p2;
p2=p2->prev;
}
start=p1;
printf("List reversed\n");
return start;
}/*End of reverse()*/

You might also like