5. Display Function
void display()
{
if (start==NULL)
printf("nList is emptyn");
else
{
NODE *traverse;
traverse=start;
printf("The linked list is: ");
printf("%d ",traverse->info);
while (traverse->link!=start)
{
traverse=traverse->link;
printf("%d ",traverse->info);
}
}
}
6. The Insert Menu
void insert()
{
int choice;
while(1)
{
printf("n---Insert Menu---n");
printf("1. Insert at first position.n");
printf("2. Insert in between.n");
printf("3. Insert at the end.n");
printf("4. Go to main menun");
printf("5. Exitn");
printf("Enter choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: insert_first();
break;
case 2: insert_between();
break;
case 3: insert_end();
break;
case 4: mainmenu();
break;
case 5: exit(0);
break;
default: printf("Enter a valid choice.");
}
}
}
7. Insertion Of Node In The First Place
void insert_first()
{
if(start==NULL)
{
printf("List is empty. Create as the first node.n");
create();
}
else
{
NODE *temp,*traverse;
int iData;
printf("Enter an integer value: ");
scanf("%d",&iData);
temp=(NODE *)malloc(sizeof(NODE));
temp->info=iData;
traverse=start;
while(traverse->link!=start)
{
traverse=traverse->link;
}
traverse->link=temp;
temp->link=start;
start=temp;
}
display();
}
8. Insert At A Particular Position
void insert_between()
{
if(start==NULL)
{
printf("List is empty. Create as the first node.n");
create();
}
else
{
NODE *temp, *traverse;
int iLoop,iPosition,iCount,iData;
printf("Enter the position where you want to insert: ");
scanf("%d",&iPosition);
iCount=count();
if(iPosition>iCount)
{
printf("There are only %d elements.",iCount);
}
else
{
traverse=start;
printf("Enter an integer value: ");
scanf("%d",&iData);
for(iLoop=0;iLoop<iPosition-2;iLoop++)
{
traverse=traverse->link;
}
temp=(NODE*)malloc(sizeof(NODE));
temp->info=iData;
temp->link=traverse->link;
traverse->link=temp;
}
}
display();
}
9. Insert Node At The End
void insert_end()
{
if(start==NULL)
{
printf("List is empty. Create as the first node.n");
create();
}
else
{
create();
}
display();
}
10. Counting of the nodes
int count()
{
NODE *traverse;
int iCount=0;
if (start == NULL)
{
printf("nList is empty.n");
return iCount;
}
else
{
traverse = start;
if(traverse->link==start)
{
iCount=1;
return iCount;
}
else
{
iCount=1;
while (traverse->link != start)
{
iCount++;
traverse = traverse->link;
}
return iCount;
}
}
}
11. The Delete Menu
void deletion()
{
int choice;
while(1)
{
printf("n---Delete Menu---n");
printf("1. Delete first node.n");
printf("2. Delete last node.n");
printf("3. Delete by position.n");
printf("4. Go to main menun");
printf("5. Exitn");
printf("Enter choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: delete_first();
break;
case 2: delete_end();
break;
case 3: delete_position();
break;
case 4: mainmenu();
break;
case 5: exit(0);
break;
default: printf("Enter a valid choice.");
}
}
}
12. Delete Node From The First Position
void delete_first()
{
if (start==NULL)
{
printf("nList is empty.n");
}
else
{
int iCount;
iCount=count();
if(iCount==1)
{
start=NULL;
free(start);
}
else
{
NODE *delete_node,*traverse;
traverse=start;
while(traverse->link!=start)
{
traverse=traverse->link;
}
delete_node=start;
start=start->link;
traverse->link=start;
free(delete_node);
}
display();
}
}
13. Delete Node From The End
void delete_end()
{
if (start==NULL)
{
printf("nList is empty.n");
}
else
{
int iCount;
iCount=count();
if(iCount==1)
{
start=NULL;
free(start);
}
else
{
NODE *traverse, *delete_node;
traverse=start;
while(traverse->link->link!=start)
{
traverse=traverse->link;
}
delete_node=traverse->link;
traverse->link=start;
free(delete_node);
}
display();
}
}
14. Delete At A Particular Position
void delete_position()
{
if (start==NULL)
{
printf("nList is empty.n");
}
else
{
int iCount,iPosition,iLoop;
printf("Enter the position to be deleted: ");
scanf("%d",&iPosition);
iCount=count();
if(iPosition>iCount)
{
printf("There are only %d elements.",iCount);
}
else
{
if(iCount==1)
{
start=NULL;
free(start);
}
else
{
NODE *delete_node, *traverse;
traverse=start;
for(iLoop=0;iLoop<iPosition-2;iLoop++)
{
traverse=traverse->link;
}
delete_node=traverse->link;
traverse->link=delete_node->link;
free(delete_node);
}
display();
}
}
}
15. Sorting Of The List
void sort()
{
NODE *traverse1, *traverse2;
int iOuter_Loop,iInner_Loop,iCount,temp;
iCount=count();
for(iOuter_Loop=0;iOuter_Loop<iCount-1;iOuter_Loop++)
{
traverse1=start;
traverse2=traverse1->link;
for(iInner_Loop=iOuter_Loop+1;iInner_Loop<iCount;iInner_Loop++)
{
if(traverse1->info>traverse2->info)
{
temp=traverse1->info;
traverse1->info=traverse2->info;
traverse2->info=temp;
}
traverse1=traverse1->link;
traverse2=traverse2->link;
}
}
display();
}
16. Reversal Of The List
void reverse()
{
NODE *previous, *current, *next;
previous=start;
current=previous->link;
next=current->link;
current->link=previous;
while(next!=start)
{
previous=current;
current=next;
next=next->link;
current->link=previous;
}
start->link=current;
start=current;
display();
}
17. Searching Of An Element
void find()
{
int iData;
NODE *traverse;
printf("Enter a number to be searched: ");
scanf("%d",&iData);
traverse=start;
while(traverse->link!=start)
{
if(traverse->info==iData)
{
printf("Element found.");
return;
}
else
{
traverse=traverse->link;
}
}
if(traverse->info==iData)
{
printf("Element found.");
return;
}
else
{
printf("Element not found.");
}
}