CIRCULAR LINKED LIST
A Menu Driven Program In C
The Basic Declarations
#include<stdio.h>
#include<stdlib.h>
void mainmenu(), create(), display(), insert(), insert_first(), insert_between(),
insert_end(), deletion(), delete_first(), delete_position(), delete_end(),
sort(), reverse(), find();
int count();
struct node
{
int info;
struct node *link;
};
typedef struct node NODE;
NODE *start=NULL;
int main()
{
mainmenu();
}
The Mainmenu Function
void mainmenu()
{
int choice,x;
while(1)
{
printf("n----MAIN MENU----n");
printf("1. Create.n");
printf("2. Display.n");
printf("3. Insert.n");
printf("4. Count.n");
printf("5. Delete.n");
printf("6. Sorting.n");
printf("7. Reverse.n");
printf("8. Find.n");
printf("9. Exit.n");
printf("Enter choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: create();
break;
case 2: display();
break;
case 3: insert();
break;
case 4: x=count();
printf("The number of elements are %d",x);
break;
case 5: deletion();
break;
case 6: sort();
break;
case 7: reverse();
break;
case 8: find();
break;
case 9: exit(0);
break;
default: printf("Enter a valid choice.");
}
}
}
Creation Of Nodes
void create()
{
NODE *temp, *traverse;
int iData;
printf("Enter an integer value: ");
scanf("%d",&iData);
temp=(NODE *)malloc(sizeof(NODE));
temp->info=iData;
temp->link=NULL;
if(start==NULL)
{
start=temp;
start->link=temp;
}
else
{
traverse=start;
while(traverse->link!=start)
{
traverse=traverse->link;
}
traverse->link=temp;
temp->link=start;
}
}
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);
}
}
}
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.");
}
}
}
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();
}
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();
}
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();
}
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;
}
}
}
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.");
}
}
}
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();
}
}
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();
}
}
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();
}
}
}
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();
}
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();
}
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.");
}
}
Presented By:
Sayantan Sur
Thank You

Circular linked list

  • 1.
    CIRCULAR LINKED LIST AMenu Driven Program In C
  • 2.
    The Basic Declarations #include<stdio.h> #include<stdlib.h> voidmainmenu(), create(), display(), insert(), insert_first(), insert_between(), insert_end(), deletion(), delete_first(), delete_position(), delete_end(), sort(), reverse(), find(); int count(); struct node { int info; struct node *link; }; typedef struct node NODE; NODE *start=NULL; int main() { mainmenu(); }
  • 3.
    The Mainmenu Function voidmainmenu() { int choice,x; while(1) { printf("n----MAIN MENU----n"); printf("1. Create.n"); printf("2. Display.n"); printf("3. Insert.n"); printf("4. Count.n"); printf("5. Delete.n"); printf("6. Sorting.n"); printf("7. Reverse.n"); printf("8. Find.n"); printf("9. Exit.n"); printf("Enter choice: "); scanf("%d",&choice); switch(choice) { case 1: create(); break; case 2: display(); break; case 3: insert(); break; case 4: x=count(); printf("The number of elements are %d",x); break; case 5: deletion(); break; case 6: sort(); break; case 7: reverse(); break; case 8: find(); break; case 9: exit(0); break; default: printf("Enter a valid choice."); } } }
  • 4.
    Creation Of Nodes voidcreate() { NODE *temp, *traverse; int iData; printf("Enter an integer value: "); scanf("%d",&iData); temp=(NODE *)malloc(sizeof(NODE)); temp->info=iData; temp->link=NULL; if(start==NULL) { start=temp; start->link=temp; } else { traverse=start; while(traverse->link!=start) { traverse=traverse->link; } traverse->link=temp; temp->link=start; } }
  • 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 voidinsert() { 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 NodeIn 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 AParticular 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 AtThe End void insert_end() { if(start==NULL) { printf("List is empty. Create as the first node.n"); create(); } else { create(); } display(); }
  • 10.
    Counting of thenodes 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 voiddeletion() { 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 FromThe 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 FromThe 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 AParticular 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 TheList 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 TheList 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 AnElement 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."); } }
  • 18.