Created
March 9, 2019 10:02
-
-
Save luk0y/f78a53176667af0a1644c5b874af784c to your computer and use it in GitHub Desktop.
All deletion operations in a double linked list
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<stdlib.h> | |
void delstart(); | |
void delend(); | |
void delgiven(); | |
void delbefore(); | |
void delafter(); | |
struct node | |
{ | |
int data; | |
struct node *addr; | |
}; struct node *start=NULL; | |
void main() | |
{ | |
man: | |
printf("\nEnter number of nodes you want to enter : "); | |
start=NULL; | |
char lol; | |
struct node *new_node,*ptr,*prev; | |
int y,c,x; | |
scanf("%d",&y); | |
if(y>0){ | |
int k=y; | |
printf("\nEnter the data for the Linked list : \n"); | |
while(y!=0) | |
{ | |
scanf("%d",&x); | |
new_node=(struct node*) malloc(sizeof(struct node)); | |
if(new_node==NULL) | |
{ | |
printf("\nNo space"); | |
} | |
else | |
{ | |
if(start==NULL) | |
{ | |
start=new_node; | |
new_node->data=x; | |
new_node->addr=NULL; | |
} | |
else | |
{ | |
ptr=start; | |
while(ptr->addr!=NULL) | |
{ | |
prev=ptr; | |
ptr=ptr->addr; | |
} | |
ptr->addr=new_node; | |
new_node->data=x; | |
new_node->addr=NULL; | |
} | |
} | |
y--; | |
} | |
while(k!=0){ | |
jam: | |
printf("\n\nEnter 1 for delstart\nEnter 2 for delend\nEnter 3 for delgiven\nEnter 4 for delbefore\nEnter 5 for delafter\n---------------------\n\n"); | |
scanf("%d",&c); | |
switch(c) | |
{ | |
case 1: | |
if(k!=1){ | |
delstart(); | |
} | |
else | |
{ | |
free(start); | |
printf("\nNew Linked list:\n"); | |
printf("\nNULL\n\n"); | |
goto gb; | |
} | |
break; | |
case 2: | |
if(k!=1){ | |
delend(); | |
break; | |
} | |
else | |
{ | |
free(start); | |
printf("\nNew Linked list\n"); | |
printf("\nNULL\n\n"); | |
goto gb; | |
} | |
case 3: | |
if(k!=1){ | |
delgiven(); | |
} | |
else | |
{ | |
mka: | |
printf("\nEnter the element you want to delete : "); | |
scanf("%d",&y); | |
if(start->data==y) | |
{ | |
free(start); | |
printf("\nNew Linked list\n"); | |
printf("\n\nNULL\n"); | |
goto gb; | |
}else | |
{ | |
printf("\nElement not found....Try again...."); | |
goto mka; | |
} | |
} | |
break; | |
case 4: | |
if(k!=1){ | |
delbefore(); | |
break;} | |
else{ | |
printf("\nThere is no before element\n"); | |
goto jam; | |
} | |
case 5: | |
if(k!=1){ | |
delafter(); | |
break;} | |
else | |
{ | |
printf("\nThere is no after element\n"); | |
goto jam; | |
} | |
default: | |
printf("\nEnter a correct input\n\n"); | |
goto jam; | |
} | |
new_node=start; | |
printf("\n\nNew Linked list : \n"); | |
while(new_node!=NULL) | |
{ | |
printf("%d\n",new_node->data); | |
new_node=new_node->addr; | |
} | |
gb: | |
k--; | |
if (k!=0){ | |
printf("\nDo you want to continue deletion operations ?(press y to continue or press any other to exit ) : "); | |
scanf(" %c",&lol); | |
if(lol=='y') | |
{ | |
goto jam; | |
} | |
else | |
{ | |
goto endn; | |
} | |
} | |
else | |
{ | |
printf("\n\nNo elements there in the list....press y to create the list again or else n to exit : "); | |
scanf(" %c",&lol); | |
if(lol=='y'){ | |
goto man; | |
} | |
else | |
{ | |
goto endn; | |
} | |
} | |
} | |
} | |
else | |
{ | |
char hj; | |
printf("\n\nNo node created....Enter y to create a list or Enter any other : "); | |
scanf(" %c",&hj); | |
if(hj=='y') | |
{ | |
goto man; | |
} | |
else | |
{ | |
endn : | |
printf("\n\nBye Bye...See you again...\n"); | |
} | |
} | |
} | |
void delstart() | |
{ | |
struct node *ptr=start; | |
start=start->addr; | |
free(ptr); | |
ptr=start; | |
} | |
void delend() | |
{ struct node *ptr=start; | |
struct node *prev; | |
while(ptr->addr!=NULL) | |
{ | |
prev=ptr; | |
ptr=ptr->addr; | |
} | |
prev->addr=NULL; | |
free(ptr); | |
} | |
void delgiven() | |
{ struct node *ptr=start; | |
struct node *prev; | |
int y; | |
moq : | |
printf("\nEnter the element you want to delete : "); | |
scanf("%d",&y); | |
ptr=start; | |
if(y!=ptr->data) | |
{ | |
while(ptr->data!=y && ptr->addr!=NULL) | |
{ | |
prev=ptr; | |
ptr=ptr->addr; | |
} | |
if(ptr->data==y){ | |
prev->addr=ptr->addr; | |
free(ptr); | |
ptr=start; | |
} | |
else | |
{ | |
printf("\nElement not found...Enter another...\n\n"); | |
goto moq; | |
} | |
}else | |
{ | |
delstart(); | |
} | |
} | |
void delbefore() | |
{ struct node *ptr=start; | |
struct node *prev,*pp; | |
int y; | |
malk: | |
printf("\nEnter the reference item to del before : "); | |
int x=1; | |
scanf("%d",&y); | |
ptr=start; | |
if (ptr->data!=y){ | |
while(ptr->data!=y && ptr->addr!=NULL) | |
{ | |
x=x+1; | |
pp=prev; | |
prev=ptr; | |
ptr=ptr->addr; | |
} | |
if(ptr->data==y){ | |
if(x==2) | |
{ start=ptr; | |
free(prev); | |
} | |
else | |
{ pp->addr=ptr; | |
free(prev);} | |
}else | |
{ | |
printf("\nReference element is not exist in the list ...Try again \n\n"); | |
goto malk; | |
} | |
} | |
else | |
{printf("\nYou have entered the first node...Enter again another number to exit \n\n"); | |
goto malk; | |
} | |
} | |
void delafter() | |
{ struct node *ptr=start; | |
struct node *prev; int y; | |
kj: | |
printf("\nEnter the reference item to del after : "); | |
scanf("%d",&y); | |
ptr=start; | |
while(ptr->data!=y && ptr->addr->addr!=NULL) | |
{ | |
ptr=ptr->addr; | |
} | |
if(ptr->data==y){ | |
prev=ptr->addr; | |
ptr->addr=prev->addr; | |
free(prev); | |
}else | |
{ | |
printf("\nYou have entered the last element or you entered a number which is not there in the list...Try again \n"); | |
goto kj; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment