-------------------------------------------------------------------------------------------------------------------
Singly circular Link List
Create
a node and insert and delete ,frist,last,middle,specific position
----------------------------------------------------------------------------------------------------------------
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
} ;
struct node *head=NULL ,
*newnode,*temp=NULL,*q,*s;//global declaration
voiddeletelast();
voiddeletefirst();
voiddeletemid();
voiddeletesp();
voidinsertfirst();
voidinsertlast();
voidinsertmid();
voidinsertsp();
voidcreatenode();
void display();
void
main()
{
intch;
clrscr();
do
{
printf("\n
1 . Insert at first ");
printf("\n
2 . insert at last ");
printf("\n
3 . Insert at middel ");
printf("\n
4 . Insert at specific location ");
printf("\n
5 ..*..... LIST Display...........*. ");
printf("\n
6 . Delete from first ");
printf("\n
7. Delete from last ");
printf("\n
8 . Delete from middel ");
printf("\n
9 . Delete from specific location ");
printf("\n
10 . *..........Exit................ ");
printf("\n
Enter your choice............ ");
scanf("%d",&ch);
switch(ch)
{
case
1:createnode();
insertfirst();
printf("\nNode
inserted Sucessfully \n");
break;
case 2:
createnode();
insertlast();
printf("\nNode
inserted Sucessfully \n");
break;
case
3:createnode();
insertmid();
printf("\nNode
inserted Sucessfully \n");
break;
case
4:createnode();
insertsp();
break;
case
5:display();
printf("\n\n");
break;
case
6:deletefirst();
printf("\n\n");
break;
case
7:deletelast();
printf("\n\n");
break;
case
8:deletemid();
printf("\n\n");
break;
case
9:deletesp();
printf("\n\n");
break;
case
10:exit(0);
default :printf("\n\n Re enter u r choice
.......");
}
}while(1);
getch();
}
voidcreatenode()
{
newnode= (struct node * )(malloc) (sizeof (struct node));
newnode->next=newnode;
printf(" Enter data ");
scanf("%d",&newnode->data);
}
//----------------------------------------------------------------
voidinsertfirst()
{
if(head==NULL)
{
head=newnode;
}
else
{ temp=head;
while(temp->next!=head)
{
temp=temp->next;
}
newnode->next=head;
temp->next=newnode;
head=newnode;
}
}
//----------------------------------------------------------------------------------
voidinsertlast()
{
if(head==NULL)
{
head=newnode;
}
else
{
temp=head;
while(temp->next!=head) //reach to last node
{
temp=temp->next;
}
temp->next=newnode;
newnode->next=head ;
//connect newnode
}
}
//------------------------------------------------------------------------------------------
voidinsertmid()
{
intcnt=1,m,i=1;
if(head==NULL)
{
head=newnode;
}
else
{
temp=head;
while(temp->next!=head) //reach to last node
{
cnt++;
temp=temp->next;
}
temp=head;
m=cnt/2;
while(i<m)
{
temp=temp->next;
i++;
}
q=temp->next;
temp->next=newnode; //connect newnode
newnode->next=q;
}
}
voidinsertsp()
{
intcnt=1,p,i=1;
printf("\n\n Enter postion ");
scanf("%d",&p);
if(head==NULL)
{
printf("List is empty ...........");
}
else
{
temp=head;
while(temp->next!=head) //count nodes
{
cnt++;
temp=temp->next;
}
if(p>1&&p<cnt)
{
temp=head;
while(i<p)
{
temp=temp->next;
i++;
}
q=temp->next;
temp->next=newnode; //connect newnode
newnode->next=q;
printf("\nNode
inserted Sucessfully \n");
}
else
printf("\n\n
plzreEnterpostion ....");
}
}
//------------------------------------------------------------------------------------------------
void
display()
{
struct node *temp ;
temp=head;
do
{ printf("%d ",temp->data);
temp=temp->next;
} while(temp!=head);
}
//-------------------------------------------------------------------------------------
voiddeletefirst()
{
if (head==NULL)
printf("\n\n List is empty .......................");
else
{
q=head; //q
is last node
while(q->next!=head)
{
q=q->next;
}
temp=head;
head=temp->next;
printf(" Deleted node is---- %d----",temp->data);
free(temp);
q->next=head;
}
}
//--------------------------------------------------------------------------------------------
voiddeletelast()
{
if (head==NULL)
printf("\n\n List is empty .......................");
else
{
temp=head;
while(temp->next->next!=head)
{
temp=temp->next;
}
q=temp->next;
printf(" Deleted node is---- %d----",q->data);
free(q);
temp->next=head;
}
}
//------------------------------------------------------------------------------------------
voiddeletemid()
{
intcnt=1,m,i=1;
if(head==NULL)
{
printf("\n\n List is empty .............");
}
else
{
temp=head;
while(temp->next!=head)
{
cnt++;
temp=temp->next;
}
temp=head;
m=cnt/2;
while(i<m)
{
temp=temp->next;
i++;
}
q=temp->next;
s=q->next;
printf("\n\n
Deleted Node is %d ",q->data);
free(q);
temp->next=s;
}
}
//---------------------------------------------------------------------------------------------------------------
voiddeletesp()
{
intcnt=1,p,i=1;
printf("\n\n Enter postion ");
scanf("%d",&p);
if(head==NULL)
{
printf("List is empty ...........");
}
else
{
temp=head;
while(temp->next!=head) //count nodes
{
cnt++;
temp=temp->next;
}
if(p>1&&p<cnt)
{
temp=head;
while(i<p)
{
temp=temp->next;
i++;
}
q=temp->next;
s=q->next;
printf("\n\n
Deleted Node is %d ",q->data);
free(q);
temp->next=s;
}
else
printf("\n\n
plzreEnterpostion ....");
}
}