Program
– Circular Linked List – Create - insertion – Deletion
// Create and traverse Circular
linked list
// Insert first, last and node at
desire position
// Delete first, last and node at
desire position
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct link
{
int
no;
struct
link *next;
};
int i=0;
struct link
*node,*start,*pre,*new1;
void create_link(struct link
*node);
void display(struct link *node);
void insert_first(struct link
*node);
void insert_last(struct link
*node);
void insert_desireposition(struct
link *node);
void delete_first(struct link
*node);
void delete_last(struct link
*node);
void delete_desireposition(struct
link *node);
void main()
{
int
ch;
clrscr();
while(1)
{
printf("\n
Circular Linked List");
printf("\n---------------------------");
printf("\n
1. Create Circular Linked List");
printf("\n
2. Traverse Link List");
printf("\n
3. Insert First node");
printf("\n
4. Insert Last node");
printf("\n
5. Insert node at Desire Position");
printf("\n
6. Delete First node");
printf("\n
7. Delete Last node");
printf("\n
8. Delete node at Desire Position");
printf("\n
9. Exit");
printf("\n-----------------------------");
printf("\n
Enter your choice : ");
scanf("%d",&ch);
switch(ch)
{
case
1:
node=(struct
link *)malloc(sizeof(struct link));
create_link(node);
break;
case
2:
printf("\n
Output\n");
display(node);
break;
case
3:
insert_first(node);
printf("\n
After Inserting First Node");
display(node);
break;
case
4:
insert_last(node);
printf("\n
After Inserting Last Node");
display(node);
break;
case
5:
insert_desireposition(node);
printf("\n
After Inserting At Desire Position");
display(node);
break;
case
6:
delete_first(node);
printf("\n
After Deleting First Node");
display(node);
break;
case
7:
delete_last(node);
printf("\n
After Deleting Last Node");
display(node);
break;
case
8:
delete_desireposition(node);
printf("\n
After Deleting At Desire Position");
display(node);
break;
case
9:
exit(0);
break;
default:
printf("\n
Wrong Choice");
}
}
getch();
}
void create_link(struct link
*node)
{
char
ans;
start->next=NULL;
node=start;
fflush(stdin);
printf("\n
Enter 'n' for break:-");
ans=getchar();
while(ans!='n')
{
node->next=(struct
link *)malloc(sizeof(struct link));
node=node->next;
printf("\n
Enter data for node:-");
scanf("%d",&node->no);
node->next=start;
fflush(stdin);
printf("\n
Enter 'n' for break:-");
ans=getchar();
i++;
}
}
void display(struct link *node)
{
int
count;
node=start->next;
count=i;
while(count)
{
printf("\n %d",node->no);
node=node->next;
count--;
}
}
void insert_first(struct link
*node)
{
node=start->next;
pre=start;
new1=(struct
link *)malloc(sizeof(struct link));
printf("\n
Insert data for first node:-");
scanf("%d",&new1->no);
pre->next=new1;
new1->next=node;
i++;
}
void insert_last(struct link
*node)
{
int
count;
node=start->next;
pre=start;
count=i;
while(count)
{
pre=pre->next;
node=node->next;
count--;
}
new1=(struct
link *)malloc(sizeof(struct link));
printf("\n
Insert data for last node:-");
scanf("%d",&new1->no);
pre->next=new1;
new1->next=node;
i++;
}
void insert_desireposition(struct
link *node)
{
int
node_no=1,insert_no,flag=0,count;
node=start->next;
pre=start;
count=i;
printf("\n
Enter position where you want to insert new node:-");
scanf("%d",&insert_no);
while(count)
{
if(node_no==insert_no)
{
new1=(struct
link *)malloc(sizeof(struct link));
printf("\n
Insert data for new node:-");
scanf("%d",&new1->no);
pre->next=new1;
new1->next=node;
flag=1;
break;
}
else
{
pre=pre->next;
node=node->next;
}
node_no++;
count--;
}
if(flag==0)
{
printf("\n
Position not found");
}
else
{
i++;
}
}
void delete_first(struct link *node)
{
node=start->next;
pre=start;
if(i==0)
{
printf("\n
List is empty");
exit(0);
}
pre->next=node->next;
free(node);
i--;
}
void delete_last(struct link
*node)
{
int
node_no=0,count;
node=start->next;
pre=start;
count=i;
if(i==0)
{
printf("\n
List is empty");
exit(0);
}
while(count)
{
node_no++;
pre=pre->next;
node=node->next;
count--;
}
node=start->next;
pre=start;
while(node_no!=1)
{
node_no--;
pre=pre->next;
node=node->next;
}
if(node_no==1)
{
pre->next=node->next;
free(node);
i--;
}
}
void delete_desireposition(struct
link *node)
{
int
node_no=1,delete_no,flag=0,count;
node=start->next;
pre=start;
count=i;
printf("\n
Enter position where you want to delete node:-");
scanf("%d",&delete_no);
while(count)
{
if(node_no==delete_no)
{
pre->next=node->next;
free(node);
flag=1;
break;
}
else
{
pre=pre->next;
node=node->next;
}
node_no++;
count--;
}
if(flag==0)
{
printf("\n
Position not found");
}
else
{
i--;
}
}
Posted By : Ruchita Pandya
Perfect !
ReplyDelete