/*Implement singly CLL(circular linked list) */
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{ int data;
struct node *next;
}node;
node *create();
node *insert_b(node *head,int x);
node *insert_e(node *head,int x);
node *insert_in(node *head,int x);
node *delete_b(node *head);
node *delete_e(node *head);
node *delete_in(node *head);
void search(node *head);
void print(node *head);
int main()
{ int op,op1,x;
node *head=NULL;
do
{
printf("\n\n1)create\n2)Insert\n3)Delete\n4)Search");
printf("\n5)Print\n6)Quit");
printf("\nEnter your Choice:");
scanf("%d",&op);
switch(op)
{ case 1:head=create();break;
case 2:printf("\n\t1)Beginning\n\t2)End\n\t3)Anywhere");
printf("\nEnter your choice : ");
scanf("%d",&op1);
printf("\nEnter the data to be inserted : ");
scanf("%d",&x);
switch(op1)
{ case 1: head=insert_b(head,x);
break;
case 2: head=insert_e(head,x);
break;
case 3: head=insert_in(head, x);
break;
}
break;
case 3:printf("\n\t1)Beginning\n\t2)End\n\t3)Anywhere");
printf("\nEnter your choice : ");
scanf("%d",&op1);
switch(op1)
{ case 1:head=delete_b(head);
break;
case 2:head=delete_e(head);
break;
case 3:head=delete_in(head);
break;
}
break;
case 4:search(head);break;
case 5:print(head);break;
}
}while(op!=6);
}
node *create()
{ node *head,*p;
int i,n,x;
head=NULL;
printf("\n Enter no of data:");
scanf("%d",&n);
printf("\nEnter the data:");
for(i=0;i<n;i++)
{
scanf("%d",&x);
if(head==NULL)
{
head=(node*)malloc(sizeof(node));
head->next=head;
head->data=x;
}
else
{
p=(node*)malloc(sizeof(node));
p->data=x;
p->next=head->next;
head->next=p;
head=p;
}
}
return(head);
}
node *insert_b(node *head,int x)
{ node *p;
p=(node*)malloc(sizeof(node));
p->data=x;
if(head==NULL)
{
p->next=p;
head=p;
}
else
{
p->next=head->next;
head->next=p;
}
return(head);
}
node *insert_e(node *head,int x)
{ node *p;
p=(node*)malloc(sizeof(node));
p->data=x;
if(head==NULL)
{
p->next=p;
head=p;
}
else
{
p->next=head->next;
head->next=p;
head=p;
}
return(head);
}
node *insert_in(node *head,int x)
{ node *p,*q;
int loc,i;
p=(node*)malloc(sizeof(node));
p->data=x;
p->next=p;
printf("\Enter the location : ");
scanf("%d",&loc);
if(loc==1) // inserting as a first node
{ if(head==NULL)
return(p);
else
{
p->next=head->next;
head->next=p;
}
}
else
{
q=head->next;
for(i=1; i<loc-1;i++)
if(q->next != head->next)
q=q->next;
else
{
printf("\nOverflow ****\n ");
return head;
}
//insert a node as next node of q
p->next=q->next;
q->next=p;
if(q==head)
head=p;
}
return(head);
}
node *delete_b(node *head)
{
node *p,*q;
if(head==NULL)
{
printf("\nUnderflow....Empty Linked List");
return(head);
}
p=head->next;
if(head->next==head)
head=NULL;
else
head->next=p->next;
free(p);
return(head);
}
node *delete_e(node *head)
{
node *p,*q;
if(head==NULL)
{
printf("\nUnderflow....Empty Linked List");
return(head);
}
p=head->next;
if(head->next==head)
{ // Delete the only element
head=NULL;
free(p);
return(head);
}
//Locate the last but one node
for(q=head->next;q->next!=head;q=q->next)
;
p=head;
head=q;
head->next=p->next;
free(p);
return(head);
}
node *delete_in(node *head)
{
node *p,*q;
int loc,i;
if(head==NULL)
{
printf("\nUnderflow....Empty Linked List");
return(head);
}
printf("\nEnter the location of the data to be deleted : ");
scanf("%d",&loc);
if(loc==1)
{ // Delete the first element
p=head->next;
if(head->next==head)
head=NULL;
else
head->next=p->next;
free(p);
return(head);
}
else
{
q=head->next;
for(i=1; i<loc-1;i++)
if(q->next->next!=head->next)
q=q->next;
else
{
printf("\nunderflow **** ");
return head;
}
p=q->next;
q->next=p->next;
if(p==head)
head=q;
free(p);
}
return(head);
}
void search(node *head)
{ node *p;
int data,loc=1;
printf("\nEnter the data to be searched: ");
scanf("%d",&data);
p=head->next;
do
{
if(data==p->data)
{
printf("\nFound at location=%d",loc);
return;
}
loc++;
p=p->next;
}while(p!=head->next);
printf("\nNot found:");
}
void print(node *head)
{
node *p;
printf("\n\n");
if(head==NULL)
return;
p=head->next;
do
{
printf("%d ",p->data);
p=p->next;
} while(p!=head->next);
}
No comments:
Post a Comment