From b69202e16f40f78dde8eed4ff0e7af01ea18bb18 Mon Sep 17 00:00:00 2001 From: DIVYA-KUMARI1 <65301819+DIVYA-KUMARI1@users.noreply.github.com> Date: Thu, 8 Oct 2020 20:39:05 +0530 Subject: [PATCH] Queue=>Double ended queue --- Queue=>Double ended queue | 241 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 Queue=>Double ended queue diff --git a/Queue=>Double ended queue b/Queue=>Double ended queue new file mode 100644 index 0000000..4401ffa --- /dev/null +++ b/Queue=>Double ended queue @@ -0,0 +1,241 @@ +#include +#include + +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); + } +} +______________________________