diff --git a/Data_Structures/linkedList/LinkedList.c b/Data_Structures/linkedList/LinkedList.c new file mode 100644 index 0000000..900d10a --- /dev/null +++ b/Data_Structures/linkedList/LinkedList.c @@ -0,0 +1,212 @@ +#include +#include + +struct Node +{ + int data; + struct Node *next; +}*head = NULL; + +void insertAtBeginning(int value) +{ + struct Node *newNode; + newNode = (struct Node*)malloc(sizeof(struct Node)); + newNode->data = value; + if(head == NULL) + { + newNode->next = NULL; + head = newNode; + } + else + { + newNode->next = head; + head = newNode; + } + printf("\nOne node inserted!!!\n"); +} +void insertAtEnd(int value) { + struct Node *newNode; + newNode = (struct Node*)malloc(sizeof(struct Node)); + newNode->data = value; + newNode->next = NULL; + if(head == NULL) + head = newNode; + else + { + struct Node *temp = head; + while(temp->next != NULL) + temp = temp->next; + temp->next = newNode; + } + printf("\nOne node inserted!!!\n"); +} +void insertBetween(int value, int loc1) { + struct Node *temp; + struct Node *allocate; + allocate = (struct Node*)malloc(sizeof(struct Node)); + allocate->data = value; + if(head == NULL) + { + allocate->next = head; + head = allocate; + } + else + temp = head; + { + for (int i = 0; i < loc1-2; i++) + { + temp = temp->next; + } + allocate->next = temp->next; + temp->next = allocate; + } + printf("\nOne node inserted!!!\n"); +} + +void removeBeginning() { + if(head == NULL) + printf("\n\nList is Empty!!!"); + else + { + struct Node *temp = head; + if(head->next == NULL) + { + head = NULL; + free(temp); + } + else + { + head = temp->next; + free(temp); + printf("\nOne node deleted!!!\n\n"); + } + } +} +void removeEnd(){ + if(head == NULL) + { + printf("\nList is Empty!!!\n"); + } + else + { + struct Node *temp1 = head,*temp2; + if(head->next == NULL) + head = NULL; + else + { + while(temp1->next != NULL) + { + temp2 = temp1; + temp1 = temp1->next; + } + temp2->next = NULL; + } + free(temp1); + printf("\nOne node deleted!!!\n\n"); + } +} +void removeSpecific(int delValue) { + struct Node *temp1 = head, *temp2; + while(temp1->data != delValue) + { + if(temp1 -> next == NULL){ + printf("\nGiven node not found in the list!!!"); + } + temp2 = temp1; + temp1 = temp1 -> next; + } + temp2 -> next = temp1 -> next; + free(temp1); + printf("\nOne node deleted!!!\n\n"); +} + +void display() { + if(head == NULL) + { + printf("\nList is Empty\n"); + } + else + { + struct Node *temp = head; + printf("\n\nList elements are - \n"); + while(temp->next != NULL) + { + printf("%d --->",temp->data); + temp = temp->next; + } + printf("%d --->NULL",temp->data); + } + +} + +void reverse(){ + struct Node *p1,*p2,*p3,*ptr; + p1=head; + p2=p1->next; + p3=p2->next; + p1->next=NULL; + p2->next=p1; + while(p3!=NULL){ + p1=p2; + p2=p3; + p3=p3->next; + p2->next=p1; + } + head=p2; + display(); +} + +void main() { + int choice,value,choice1,loc1,loc2; + while(1){ + printf("\n\nThis is created by Prayas Jain of CSE3 (LE)\n"); + mainMenu: printf("****** MENU ******\n1. Insert\n2. Display\n3. Delete\n4. Reverse\n5. Exit\nEnter your choice: "); + scanf("%d",&choice); + switch(choice) + { + case 1: printf("Enter the value to be insert: "); + scanf("%d",&value); + while(1){ + printf("Where you want to insert: \n1. At Beginning\n2. At End\n3. Between\nEnter your choice: "); + scanf("%d",&choice1); + switch(choice1) + { + case 1: insertAtBeginning(value); + break; + case 2: insertAtEnd(value); + break; + case 3: printf("Enter the location where you wanto insert: "); + scanf("%d",&loc1); + insertBetween(value,loc1); + break; + default: printf("\nWrong Input!! Try again!!!\n\n"); + } + goto subMenuEnd; + } + subMenuEnd: + case 2: display(); + break; + case 3: printf("How do you want to Delete: \n1. From Beginning\n2. From End\n3. Spesific\nEnter your choice: "); + scanf("%d",&choice1); + switch(choice1) + { + case 1: removeBeginning(); + break; + case 2: removeEnd(value); + break; + case 3: printf("Enter the value which you want to delete: "); + scanf("%d",&loc2); + removeSpecific(loc2); + break; + default: printf("\nWrong Input!! Try again!!!\n\n"); + goto mainMenu; + } + break; + case 4: + reverse(); + goto mainMenu; + case 5: exit(0); + default: printf("\nWrong input!!! Try again!!\n\n"); + } + } +} \ No newline at end of file diff --git a/Data_Structures/linkedList/doubleLinkedList.c b/Data_Structures/linkedList/doubleLinkedList.c new file mode 100644 index 0000000..003168d --- /dev/null +++ b/Data_Structures/linkedList/doubleLinkedList.c @@ -0,0 +1,209 @@ +#include +#include + +struct Node { + struct Node *prev; + int value; + struct Node *next; +}*head = NULL, *tail = NULL; + +void insertionAtBegining(int data) { + struct Node *current = head; + struct Node *newNode; + newNode = (struct Node*)malloc(sizeof(struct Node)); + newNode-> value = data; + if (current == NULL){ + newNode->prev = NULL; + newNode->next = NULL; + head = newNode; + tail = newNode; + }else{ + newNode->prev = NULL; + newNode-> next = head; + head->prev = newNode; + head = newNode; + } +} + +void insertionAtTail(int data){ + struct Node *current = head; + struct Node *newNode; + newNode = (struct Node*)malloc(sizeof(struct Node)); + newNode-> value = data; + if (current == NULL){ + newNode->prev = NULL; + newNode->next = NULL; + head = newNode; + tail = newNode; + }while(current->next != NULL){ + current = current->next; + } + current->next = newNode; + newNode->prev = current; + newNode->next = NULL; + tail = newNode; +} + +void insertBetween(int data, int location){ + struct Node *current = head; + struct Node *newNode; + newNode = (struct Node*)malloc(sizeof(struct Node)); + newNode-> value = data; + if (current == NULL){ + newNode->prev = NULL; + newNode->next = NULL; + head = newNode; + tail = newNode; + }else{ + struct Node *previousNode; + int i=1; + while (inext; + i++; + } + newNode->next = current->next; + newNode->prev = current; + if (current->next != NULL){ + current->next->prev = newNode; + } + current->next = newNode; + } +} + +void deltionAtBegining(){ + if(head == NULL && tail == NULL){ + printf("LIST IS EMPTY"); + } + struct Node *current = head; + head = current->next; + current->next->prev = NULL; + free(current); +} + +void deletionAtTail(){ + if(head == NULL && tail == NULL){ + printf("LIST IS EMPTY"); + }else if(head == tail){ + free(head); + head = NULL; + tail = NULL; + } + else{ + struct Node *current = head; + while(current->next != NULL){ + current = current->next; + } + current->prev->next = NULL; + tail = current->prev; + free(current); + } + + +} + +void deleteSpecific(int position){ + struct Node *current = head; + if(head == NULL && tail == NULL){ + printf("LIST IS EMPTY"); + }else{ + for(int i=1; inext; + } + current->prev->next = current->next; + current->next->prev = current->prev; + free(current); + } + +} +void printList(){ + struct Node *current = head; + printf("head--> %p \n",head); + while (current != NULL ){ + printf("%p --->",current->prev); + printf("%d --->",current->value); + printf("%p ",current->next); + printf("\n"); + current = current->next; + } + printf("tail--> %p\n", tail); +} + +void display(){ + struct Node *current = head; + printf("head--> %d \n",head->value); + while (current != NULL ){ + printf("%d <--->",current->value); + current = current->next; + } + printf("NULL\n"); + printf("tail--> %d\n", tail->value); +} +void reverse(){ + struct Node *temp; + struct Node *current = head; + while(current != NULL){ + temp = current->next; + current->next = current->prev; + current->prev = temp; + current= temp; + } + temp = head; + head = tail; + tail=temp; +} + +void main(){ + int choice,value,choice1,loc1,loc2; + while(1){ + printf("\n\nThis is created by Prayas Jain of CSE3 (LE)\n"); + mainMenu: printf("****** MENU ******\n1. Insert\n2. Display\n3. Delete\n4. Reverse\n5. Exit\nEnter your choice: "); + scanf("%d",&choice); + switch(choice) + { + case 1: printf("Enter the value to be insert: "); + scanf("%d",&value); + while(1){ + printf("Where you want to insert: \n1. At Beginning\n2. At End\n3. Between\nEnter your choice: "); + scanf("%d",&choice1); + switch(choice1) + { + case 1: insertionAtBegining(value); + break; + case 2: insertionAtTail(value); + break; + case 3: printf("Enter the location where you wanto insert: "); + scanf("%d",&loc1); + insertBetween(value,loc1); + break; + default: printf("\nWrong Input!! Try again!!!\n\n"); + } + goto subMenuEnd; + } + subMenuEnd: + case 2: display(); + break; + case 3: printf("How do you want to Delete: \n1. From Beginning\n2. From End\n3. Specific\nEnter your choice: "); + scanf("%d",&choice1); + switch(choice1) + { + case 1: deltionAtBegining(); + break; + case 2: deletionAtTail(value); + break; + case 3: printf("Enter the value which you want to delete: "); + scanf("%d",&loc2); + deleteSpecific(loc2); + break; + default: printf("\nWrong Input!! Try again!!!\n\n"); + goto mainMenu; + } + break; + case 4: + reverse(); + display(); + goto mainMenu; + case 5: exit(0); + default: printf("\nWrong input!!! Try again!!\n\n"); + } + } +} \ No newline at end of file diff --git a/Search/C/binary.c b/Search/C/binary.c new file mode 100644 index 0000000..badbcd0 --- /dev/null +++ b/Search/C/binary.c @@ -0,0 +1,36 @@ +#include + +int main() +{ + int location, first, last, middle,size, search, array[100]; + + printf("Enter number of elements: \n"); + scanf("%d",&size); + + printf("Enter %d integers: \n", size); + + for (location = 0; location < size; location++) + scanf("%d",&array[location]); + + printf("Enter value to find: \n"); + scanf("%d", &search); + + first = 0; + last = size - 1; + middle = (first+last)/2; + + while (first <= last) { + if (array[middle] < search) + first = middle + 1; + else if (array[middle] == search) { + printf("%d found at location: %d.\n", search, middle+1); + break; + } + else + last = middle - 1; + + middle = (first + last)/2; + } + if (first > last) + printf("The number is not in the list.\n"); +} \ No newline at end of file diff --git a/Search/C/linear.c b/Search/C/linear.c new file mode 100644 index 0000000..739f889 --- /dev/null +++ b/Search/C/linear.c @@ -0,0 +1,26 @@ +#include +void main(){ + + int input[10],location,size,search,c=0; + + printf("Enter the size of an array: "); + scanf("%d",&size); + + printf("Enter the elements of the array: "); + for(location=0;location<=size-1;location++){ + scanf("%d",&input[location]); + } + + printf("Enter the number to be search: "); + scanf("%d",&search); + for(location=0;location<=size-1;location++){ + if(input[location]==search){ + c=1; + break; + } + } + if(c==0) + printf("The number is not in the list \n"); + else + printf("The number is found at location %d \n",location+1); +} \ No newline at end of file diff --git a/Sort/C/bubble.c b/Sort/C/bubble.c new file mode 100644 index 0000000..138cf5a --- /dev/null +++ b/Sort/C/bubble.c @@ -0,0 +1,25 @@ +#include + +int main() { + + int i, j, Temp, List[] = {6, 3, 0, 4, 8, 2, 5, 0, 1, 7}; + + printf("List Before Sorting :\n"); + for (j = 0; j < 10; j++) { + printf("%d ", List[j]); + } + for (i = 0; i < 10; i++) { + for (j = 0; j <= i; j++) { + if (List[j] > List[i]) { + Temp = List[i]; + List[i] = List[j]; + List[j] = Temp; + } + } + } + printf("\nList Before Sorting :\n"); + for (j = 0; j < 10; j++) { + printf("%d ", List[j]); + } + printf ("\n"); +}