Merge b69202e16f
into 9e7a1904a5
commit
b6821d404c
@ -0,0 +1,241 @@
|
||||
#include<stdio.h>
|
||||
#include<conio.h>
|
||||
|
||||
void insertAtBeginning(int);
|
||||
void insertAtEnd(int);
|
||||
void insertAtAfter(int,int);
|
||||
void deleteBeginning();
|
||||
void deleteEnd();
|
||||
void deleteSpecific(int);
|
||||
void display();
|
||||
|
||||
struct Node
|
||||
{
|
||||
int data;
|
||||
struct Node *previous, *next;
|
||||
}*head = NULL;
|
||||
|
||||
void main()
|
||||
{
|
||||
int choice1, choice2, value, location;
|
||||
clrscr();
|
||||
while(1)
|
||||
{
|
||||
printf("\n*********** MENU *************\n");
|
||||
printf("1. Insert\n2. Delete\n3. Display\n4. Exit\nEnter your choice: ");
|
||||
scanf("%d",&choice1);
|
||||
switch()
|
||||
{
|
||||
case 1: printf("Enter the value to be inserted: ");
|
||||
scanf("%d",&value);
|
||||
while(1)
|
||||
{
|
||||
printf("\nSelect from the following Inserting options\n");
|
||||
printf("1. At Beginning\n2. At End\n3. After a Node\n4. Cancel\nEnter your choice: ");
|
||||
scanf("%d",&choice2);
|
||||
switch(choice2)
|
||||
{
|
||||
case 1: insertAtBeginning(value);
|
||||
break;
|
||||
case 2: insertAtEnd(value);
|
||||
break;
|
||||
case 3: printf("Enter the location after which you want to insert: ");
|
||||
scanf("%d",&location);
|
||||
insertAfter(value,location);
|
||||
break;
|
||||
case 4: goto EndSwitch;
|
||||
default: printf("\nPlease select correct Inserting option!!!\n");
|
||||
}
|
||||
}
|
||||
case 2: while(1)
|
||||
{
|
||||
printf("\nSelect from the following Deleting options\n");
|
||||
printf("1. At Beginning\n2. At End\n3. Specific Node\n4. Cancel\nEnter your choice: ");
|
||||
scanf("%d",&choice2);
|
||||
switch(choice2)
|
||||
{
|
||||
case 1: deleteBeginning();
|
||||
break;
|
||||
case 2: deleteEnd();
|
||||
break;
|
||||
case 3: printf("Enter the Node value to be deleted: ");
|
||||
scanf("%d",&location);
|
||||
deleteSpecic(location);
|
||||
break;
|
||||
case 4: goto EndSwitch;
|
||||
default: printf("\nPlease select correct Deleting option!!!\n");
|
||||
}
|
||||
}
|
||||
EndSwitch: break;
|
||||
case 3: display();
|
||||
break;
|
||||
case 4: exit(0);
|
||||
default: printf("\nPlease select correct option!!!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void insertAtBeginning(int value)
|
||||
{
|
||||
struct Node *newNode;
|
||||
newNode = (struct Node*)malloc(sizeof(struct Node));
|
||||
newNode -> data = value;
|
||||
newNode -> previous = NULL;
|
||||
if(head == NULL)
|
||||
{
|
||||
newNode -> next = NULL;
|
||||
head = newNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
newNode -> next = head;
|
||||
head = newNode;
|
||||
}
|
||||
printf("\nInsertion success!!!");
|
||||
}
|
||||
void insertAtEnd(int value)
|
||||
{
|
||||
struct Node *newNode;
|
||||
newNode = (struct Node*)malloc(sizeof(struct Node));
|
||||
newNode -> data = value;
|
||||
newNode -> next = NULL;
|
||||
if(head == NULL)
|
||||
{
|
||||
newNode -> previous = NULL;
|
||||
head = newNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
struct Node *temp = head;
|
||||
while(temp -> next != NULL)
|
||||
temp = temp -> next;
|
||||
temp -> next = newNode;
|
||||
newNode -> previous = temp;
|
||||
}
|
||||
printf("\nInsertion success!!!");
|
||||
}
|
||||
void insertAfter(int value, int location)
|
||||
{
|
||||
struct Node *newNode;
|
||||
newNode = (struct Node*)malloc(sizeof(struct Node));
|
||||
newNode -> data = value;
|
||||
if(head == NULL)
|
||||
{
|
||||
newNode -> previous = newNode -> next = NULL;
|
||||
head = newNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
struct Node *temp1 = head, temp2;
|
||||
while(temp1 -> data != location)
|
||||
{
|
||||
if(temp1 -> next == NULL)
|
||||
{
|
||||
printf("Given node is not found in the list!!!");
|
||||
goto EndFunction;
|
||||
}
|
||||
else
|
||||
{
|
||||
temp1 = temp1 -> next;
|
||||
}
|
||||
}
|
||||
temp2 = temp1 -> next;
|
||||
temp1 -> next = newNode;
|
||||
newNode -> previous = temp1;
|
||||
newNode -> next = temp2;
|
||||
temp2 -> previous = newNode;
|
||||
printf("\nInsertion success!!!");
|
||||
}
|
||||
EndFunction:
|
||||
}
|
||||
void deleteBeginning()
|
||||
{
|
||||
if(head == NULL)
|
||||
printf("List is Empty!!! Deletion not possible!!!");
|
||||
else
|
||||
{
|
||||
struct Node *temp = head;
|
||||
if(temp -> previous == temp -> next)
|
||||
{
|
||||
head = NULL;
|
||||
free(temp);
|
||||
}
|
||||
else{
|
||||
head = temp -> next;
|
||||
head -> previous = NULL;
|
||||
free(temp);
|
||||
}
|
||||
printf("\nDeletion success!!!");
|
||||
}
|
||||
}
|
||||
void deleteEnd()
|
||||
{
|
||||
if(head == NULL)
|
||||
printf("List is Empty!!! Deletion not possible!!!");
|
||||
else
|
||||
{
|
||||
struct Node *temp = head;
|
||||
if(temp -> previous == temp -> next)
|
||||
{
|
||||
head = NULL;
|
||||
free(temp);
|
||||
}
|
||||
else{
|
||||
while(temp -> next != NULL)
|
||||
temp = temp -> next;
|
||||
temp -> previous -> next = NULL;
|
||||
free(temp);
|
||||
}
|
||||
printf("\nDeletion success!!!");
|
||||
}
|
||||
}
|
||||
void deleteSpecific(int delValue)
|
||||
{
|
||||
if(head == NULL)
|
||||
printf("List is Empty!!! Deletion not possible!!!");
|
||||
else
|
||||
{
|
||||
struct Node *temp = head;
|
||||
while(temp -> data != delValue)
|
||||
{
|
||||
if(temp -> next == NULL)
|
||||
{
|
||||
printf("\nGiven node is not found in the list!!!");
|
||||
goto FuctionEnd;
|
||||
}
|
||||
else
|
||||
{
|
||||
temp = temp -> next;
|
||||
}
|
||||
}
|
||||
if(temp == head)
|
||||
{
|
||||
head = NULL;
|
||||
free(temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
temp -> previous -> next = temp -> next;
|
||||
free(temp);
|
||||
}
|
||||
printf("\nDeletion success!!!");
|
||||
}
|
||||
FuctionEnd:
|
||||
}
|
||||
void display()
|
||||
{
|
||||
if(head == NULL)
|
||||
printf("\nList is Empty!!!");
|
||||
else
|
||||
{
|
||||
struct Node *temp = head;
|
||||
printf("\nList elements are: \n");
|
||||
printf("NULL <--- ");
|
||||
while(temp -> next != NULL)
|
||||
{
|
||||
printf("%d <===> ",temp -> data);
|
||||
}
|
||||
printf("%d ---> NULL", temp -> data);
|
||||
}
|
||||
}
|
||||
______________________________
|
Loading…
Reference in New Issue