Untitled
unknown
plain_text
10 months ago
9.3 kB
6
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