/*
Write a program fro circular linked list
*/
#include<stdio.h>
#include<stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *last);
void display(struct node *last);
struct node *addtoempty(struct node *last,int data);
struct node *addatbeg(struct node *last,int data);
struct node *addatend(struct node *last,int data);
struct node *addafter(struct node *last,int data,int item);
struct node *del(struct node *last,int data);
main( )
{
int choice,data,item;
struct node *last=NULL;
while(1)
{
printf("1.Create List\n");
printf("2.Display\n");
printf("3.Add to empty list\n");
printf("4.Add at beginning\n");
printf("5.Add at end\n");
printf("6.Add after \n");
printf("7.Delete\n");
printf("8.Quit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
last=create_list(last);
break;
case 2:
display(last);
break;
case 3:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addtoempty(last,data);
break;
case 4:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addatbeg(last,data);
break;
case 5:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addatend(last,data);
break;
case 6:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
printf("Enter the element after which to insert : ");
scanf("%d",&item);
last=addafter(last,data,item);
break;
case 7:
printf("Enter the element to be deleted : ");
scanf("%d",&data);
last=del(last,data);
break;
case 8:
exit(1);
default:
printf("Wrong choice\n");
}
}
}
struct node *create_list(struct node *last)
{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
last=NULL;
if(n==0)
return last;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addtoempty(last,data);
for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addatend(last,data);
}
return last;
}
struct node *addtoempty(struct node *last,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
last=tmp;
last->link=last;
return last;
}
struct node *addatbeg(struct node *last,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=last->link;
last->link=tmp;
return last;
}
struct node *addatend(struct node *last,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=last->link;
last->link=tmp;
last=tmp;
return last;
}
struct node *addafter(struct node *last,int data,int item)
{
struct node *tmp,*p;
p=last->link;
do
{
if(p->info==item)
{
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=p->link;
p->link=tmp;
if(p==last)
last=tmp;
return last;
}
p=p->link;
}while(p!=last->link);
printf("%d not present in the list\n",item);
return last;
}
struct node *del(struct node *last,int data)
{
struct node *tmp,*p;
if(last==NULL)
{
printf("List is empty\n");
return last;
}
/*Deletion of only node*/
if(last->link==last && last->info==data)
{
tmp=last;
last=NULL;
free(tmp);
return last;
}
/*Deletion of first node*/
if(last->link->info==data)
{
tmp=last->link;
last->link=tmp->link;
free(tmp);
return last;
}
/*Deletion in between*/
p=last->link;
while(p->link!=last)
{
if(p->link->info==data)
{
tmp=p->link;
p->link=tmp->link;
free(tmp);
return last;
}
p=p->link;
}
/*Deletion of last node*/
if(last->info==data)
{
tmp=last;
p->link=last->link;
last=p;
free(tmp);
return last;
}
printf("Element %d not found\n",data);
return last;
}
void display(struct node *last)
{
struct node *p;
if(last==NULL)
{
printf("List is empty\n");
return;
}
p=last->link;
do
{
printf("%d ",p->info);
p=p->link;
}while(p!=last->link);
printf("\n");
}
#include<stdio.h>
#include<stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *last);
void display(struct node *last);
struct node *addtoempty(struct node *last,int data);
struct node *addatbeg(struct node *last,int data);
struct node *addatend(struct node *last,int data);
struct node *addafter(struct node *last,int data,int item);
struct node *del(struct node *last,int data);
main( )
{
int choice,data,item;
struct node *last=NULL;
while(1)
{
printf("1.Create List\n");
printf("2.Display\n");
printf("3.Add to empty list\n");
printf("4.Add at beginning\n");
printf("5.Add at end\n");
printf("6.Add after \n");
printf("7.Delete\n");
printf("8.Quit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
last=create_list(last);
break;
case 2:
display(last);
break;
case 3:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addtoempty(last,data);
break;
case 4:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addatbeg(last,data);
break;
case 5:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addatend(last,data);
break;
case 6:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
printf("Enter the element after which to insert : ");
scanf("%d",&item);
last=addafter(last,data,item);
break;
case 7:
printf("Enter the element to be deleted : ");
scanf("%d",&data);
last=del(last,data);
break;
case 8:
exit(1);
default:
printf("Wrong choice\n");
}
}
}
struct node *create_list(struct node *last)
{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
last=NULL;
if(n==0)
return last;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addtoempty(last,data);
for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
last=addatend(last,data);
}
return last;
}
struct node *addtoempty(struct node *last,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
last=tmp;
last->link=last;
return last;
}
struct node *addatbeg(struct node *last,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=last->link;
last->link=tmp;
return last;
}
struct node *addatend(struct node *last,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=last->link;
last->link=tmp;
last=tmp;
return last;
}
struct node *addafter(struct node *last,int data,int item)
{
struct node *tmp,*p;
p=last->link;
do
{
if(p->info==item)
{
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=p->link;
p->link=tmp;
if(p==last)
last=tmp;
return last;
}
p=p->link;
}while(p!=last->link);
printf("%d not present in the list\n",item);
return last;
}
struct node *del(struct node *last,int data)
{
struct node *tmp,*p;
if(last==NULL)
{
printf("List is empty\n");
return last;
}
/*Deletion of only node*/
if(last->link==last && last->info==data)
{
tmp=last;
last=NULL;
free(tmp);
return last;
}
/*Deletion of first node*/
if(last->link->info==data)
{
tmp=last->link;
last->link=tmp->link;
free(tmp);
return last;
}
/*Deletion in between*/
p=last->link;
while(p->link!=last)
{
if(p->link->info==data)
{
tmp=p->link;
p->link=tmp->link;
free(tmp);
return last;
}
p=p->link;
}
/*Deletion of last node*/
if(last->info==data)
{
tmp=last;
p->link=last->link;
last=p;
free(tmp);
return last;
}
printf("Element %d not found\n",data);
return last;
}
void display(struct node *last)
{
struct node *p;
if(last==NULL)
{
printf("List is empty\n");
return;
}
p=last->link;
do
{
printf("%d ",p->info);
p=p->link;
}while(p!=last->link);
printf("\n");
}
0 Comments