Untitled
unknown
plain_text
2 months ago
9.3 kB
2
Indexable
//All operations on a singly linked list #include<stdio.h> #include<stdlib.h> void create(); void display(); void insert_at_begin(); void insert_at_end(); void insert_at_middle(); void delete_from_begin(); void delete_from_end(); void delete_from_middle(); void delete_list(); void countNodes(); void search(); void sort(); struct linked_list { int data; struct linked_list *next; }; typedef struct linked_list node; node *head=NULL,*temp=NULL; //pointers to node data type, initially NULL void main () { int choice; while(1) { printf("\n MENU \n"); printf("1. Create \n"); printf("2. Display \n"); printf("3. Insert at beginning\n"); printf("4. Insert at end\n"); printf("5. Insert at middle\n"); printf("6. Delete from beginning\n"); printf("7. Delete from end\n"); printf("8. Delete from middle\n"); printf("9. Delete list\n"); printf("10. Count number of nodes\n"); printf("11. Search for an element\n"); printf("12. Sort the list\n"); printf("13. Exit\n"); printf("\n--------------------------------------\n"); printf("Enter your choice:"); scanf("%d",&choice); switch(choice) { case 1: create(); break; case 2: display(); break; case 3: insert_at_begin(); break; case 4: insert_at_end(); break; case 5: insert_at_middle(); break; case 6: delete_from_begin(); break; case 7: delete_from_end(); break; case 8: delete_from_middle(); break; case 9: delete_list(); break; case 10: countNodes(); break; case 11: search(); break; case 12: sort(); break; case 13: exit(0); break; default: printf("\nWrong Choice:\n"); break; } } } void create() { node *ptr; int item; ptr = (node *)malloc(sizeof(node)); if(ptr == NULL) { printf("\nOVERFLOW: Unable to allocate memory.\n"); exit(0); } printf("\nEnter data value:\n"); scanf("%d",&item); ptr->data = item; ptr->next = NULL; if(head==NULL) { head=ptr; //Creation of 1st node temp=head; } else { temp->next=ptr; //Link previous node with new node temp=temp->next; } printf("\nNode inserted\n"); } void display() { node *ptr; if(head == NULL) { printf("\nList is empty.\n"); return; } else { ptr = head; printf("\nPrinting List . . . . .\n"); if(ptr->next==NULL) //if the list contains only 1 node { printf("%d",ptr->data); return; } while (ptr!=NULL) { printf("%d-->",ptr->data); if(ptr->next->next==NULL) { printf("%d",ptr->next->data); return; } ptr = ptr -> next; //Move to next node } } } void insert_at_begin() { node *ptr; int item; ptr = (node *) malloc(sizeof(node)); if(ptr == NULL) printf("\nOVERFLOW: Unable to allocate memory."); else { printf("\nEnter value\n"); scanf("%d",&item); ptr->data = item; if(head==NULL) { ptr->next=NULL; head=ptr; temp=head; } else { ptr->next = head; head = ptr; } printf("\nNode inserted successfully"); } } void insert_at_end() { node *ptr, *temp1; int item; ptr = (node *)malloc(sizeof(node)); if(ptr == NULL) printf("\nOVERFLOW: Unable to allocate memory."); else { printf("\nEnter value\n"); scanf("%d",&item); ptr->data = item; ptr -> next = NULL; if(head == NULL) { head = ptr; temp=head; } else { temp1=head; while (temp1 -> next != NULL) temp1 = temp1 -> next; temp1->next = ptr; ptr->next = NULL; temp=ptr; } printf("\nNode inserted successfully"); } } void insert_at_middle() { int i,loc,item; node *ptr, *temp1; ptr = (node *)malloc(sizeof(node)); if(ptr == NULL) printf("\nOVERFLOW: Unable to allocate memory."); else { printf("\nEnter element value"); scanf("%d",&item); ptr->data = item; printf("\nEnter the location:"); scanf("%d",&loc); temp1=head; for(i=2;i<=loc-1 && temp1!=NULL;i++) { temp1 = temp1->next; if(temp1 == NULL) break; } if(temp1!=NULL) { ptr->next = temp1->next; temp1->next = ptr; printf("\nNode inserted successfully"); } else printf("UNABLE TO INSERT DATA AT THE GIVEN POSITION\n"); } } void delete_from_begin() { node *ptr; if(head == NULL) printf("\nList is already empty.\n"); else { ptr = head; head = ptr->next; free(ptr); printf("\nSUCCESSFULLY DELETED FIRST NODE FROM LIST\n"); } } void delete_from_end() { node *toDelete,*secondLastNode; if(head == NULL) printf("\nList is already empty."); else { toDelete = head; secondLastNode = head; while(toDelete->next != NULL) { secondLastNode = toDelete; toDelete = toDelete->next; } if(toDelete == head) { head = NULL; temp=head; } else { /* Disconnect link of second last node with last node */ secondLastNode->next = NULL; temp=secondLastNode; } free(toDelete); printf("SUCCESSFULLY DELETED LAST NODE OF LIST\n"); } } void delete_from_middle() { node *toDelete,*prevNode; int loc,i; if(head == NULL) printf("\nList is already empty."); else { printf("\nEnter the location:\n"); scanf("%d",&loc); toDelete=head; prevNode=head; for(i=2;i<=loc;i++) { prevNode=toDelete; toDelete=toDelete->next; if(toDelete==NULL) break; } if(toDelete!=NULL) { if(toDelete==head) head=head->next; else prevNode->next=toDelete->next; toDelete->next=NULL; free(toDelete); printf("NODE DELETED SUCCESSFULLY FROM THE GIVEN LOCATION\n"); } else printf("Invalid position: Unable to delete.\n"); } } void delete_list() { node *ptr; while(head != NULL) { ptr = head; head = head->next; free(ptr); } printf("SUCCESSFULLY DELETED ALL NODES OF LINKED LIST\n"); } void countNodes() { int count = 0; node *ptr; ptr = head; while(ptr != NULL) { count++; ptr = ptr->next; } printf("\nTotal number of nodes = %d\n",count); } void search() { node *ptr; int key; ptr = head; printf("\nEnter item to be searched\n"); scanf("%d",&key); while (ptr!=NULL && ptr->data!=key) ptr = ptr -> next; if(ptr!=NULL) printf("Item is present in the list"); else printf("Item is absent in the list"); } void sort() { //current will point to head node *current = head, *index = NULL; int temp; if(head == NULL) printf("List is empty"); else { while(current != NULL) { //index will point to next node of current index = current->next; while(index != NULL) { //If current node's data is greater than index's node data, swap the data between them if(current->data > index->data) { temp = current->data; current->data = index->data; index->data = temp; } index = index->next; } current = current->next; } printf("List is sorted"); } }
Editor is loading...
Leave a Comment