F Create A Circular Linked List And Insert And Delete An Element In To It | CodeTheta

Create A Circular Linked List And Insert And Delete An Element In To It

December 20, 2015


/* http://native-code.blogspot.com */
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
#define NULL 0
struct node
{
 int data;
 struct node *next;
};

void create(int x,struct node **h1);
void display(struct node **h1);
void insertatbeg(struct node **h1,int item);
void insertatmid(struct node **h1,int element);
void insertatend(struct node **h1,int item);
void deleteatbeg(struct node **h1);
void deleteatmid(struct node **h1);
void deleteatend(struct node **h1);
void main()
{
 struct node *ptr,*new1,**h1;
 int x,item,element,choice;
 h1=NULL;
 _setcursortype(_NOCURSOR);
 do
 {
    clrscr();
    printf("\n\t\t          /* http://native-code.blogspot.com */        \n");
    printf("\n\t\t          ......MENU......        \n");
    printf("\n\n\t\t(1) Create A Circular Linked List");
    printf("\n\n\t\t(2) Insert Value At Begining Of The List");
    printf("\n\n\t\t(3) Insert Value At Middle Of The List");
    printf("\n\n\t\t(4) Insert Value At End Of The List");
    printf("\n\n\t\t(5) Delete An Item From Begining Of The List");
    printf("\n\n\t\t(6) Delete An Item From Middle Of The List");
    printf("\n\n\t\t(7) Delete An Item From End Of The List");
    printf("\n\n\t\t(8) Display The List");
    printf("\n\n\t\t(9) Exit");
    printf("\n\n\n\t\t    Enter Your Choice : ");
    scanf("%d",&choice);
  clrscr();

  switch(choice)
  {
   case 1:
        h1=NULL;
        printf("\n\n\t\t (1) CREATE A CIRCULAR LInKED List.\n\n");
        printf("\n\t\t ENTER A NUMBER (0 TO Stop) :: ");
        scanf("%d",&x);
        while(x!=0)
        {
         create(x,&h1);
         printf("\n\t\t ENTER A NUMBER (0 TO Stop) :: ");
         scanf("%d",&x);
        }
        break;

   case 2:
        printf("\n\n\t\t (2) Insert An Element In The Begining OF The List.\n\n");
        printf("\n\t\t Insert An Element (0 TO Stop) :: ");
        scanf("%d",&item);
        while(item!=0)
        {
         insertatbeg(&h1,item);
         printf("\n\t\t Insert An Element (0 TO Stop) :: ");
         scanf("%d",&item);
        }
        break;

   case 3:
        printf("\n\n\t\t (3) Insert An Element In The Middle OF The List.\n\n");
        printf("\n\n\t\t ENTER The PREDECCESSOR Element :: ");
        scanf("%d",&element);
        insertatmid(&h1,element);
        break;

   case 4:
        printf("\n\n\t\t (4) Insert AT The End OF The List.\n\n");
        printf("\n\t\t ENTER The Element (0 TO Stop) :: ");
        scanf("%d",&item);
        while(item!=0)
        {
         insertatend(&h1,item);
         printf("\n\t\t ENTER The Element (0 TO Stop) :: ");
         scanf("%d",&item);
        }
        break;

   case 5:
        printf("\n\n\t\t (5) Delete From Begining OF The List.\n\n");
        if(h1==NULL)
        printf("\n\n\t\t No Data Available !!!");
        else
        deleteatbeg(&h1);
        getch();
        break;
   case 6:
        printf("\n\n\t\t (6) Delete From Middle OF The List.\n\n");
        if(h1==NULL)
        printf("\n\n\t\t No Data Available !!!");
        else
        deleteatmid(&h1);
        getch();
        break;
   case 7:
        printf("\n\n\t\t (7) Delete From The End OF The List.\n\n");
        if(h1==NULL)
        printf("\n\n\t\t No Data Available !!!");
        else
        deleteatend(&h1);
        getch();
        break;

   case 8:
        printf("\n\t\t ElementS OF The List Are .....\n\n\n\t\t ");
        display(&h1);
        getch();
        break;

   case 9:
        exit();

   default:
        printf("\n\t\t Wrong Process!!!");
  } 
 }while(1);
}      
 void create(int x,struct node **h1)

 {
    struct node *ptr,*new1;
    new1=malloc(sizeof(struct node));
    new1->data=x;
    if(*h1==NULL)
     {
      *h1=new1;
      new1->next=*h1;
     }
    else
     {
      ptr=*h1;
      while(ptr->next!=*h1)
    ptr=ptr->next;
      ptr->next=new1;
      new1->next=*h1;
     }
 }

 void insertatbeg(struct node **h1,int item)
 {
    struct node *new1,*ptr;
    new1=malloc(sizeof(struct node));
    new1->data=item;
    if(*h1==NULL)
     {
       *h1=new1;
       new1->next=*h1;
     }
    else
     {
       ptr=*h1;
       while(ptr->next!=*h1)
       ptr=ptr->next;
       new1->next=*h1;
       *h1=new1;
       ptr->next=*h1;
     }
 }

 void insertatmid(struct node **h1,int element)
 {
   struct node *ptr,*new1;
   int item;
   ptr=*h1;
   while(ptr->next!=*h1 && ptr->data!=element)
     ptr=ptr->next;
   if(ptr->data==element)
   {
     printf("\n\t\t ENTER The Element (0 TO Stop) ::  ");
     scanf("%d",&item);
     while(item!=0)
     {
       new1=malloc(sizeof(struct node));
       new1->data=item;
       new1->next=ptr->next;
       ptr->next=new1;
       ptr=new1;
       printf("\n\t\t ENTER The Element (0 TO Stop) :: ");
       scanf("%d",&item);
     }   
   }     
   else
       printf("\n\n\n\t\t Element NOT FInD !!!");
       getch();
 }

 void insertatend(struct node **h1,int item)

 {
    struct node *ptr,*new1;
    new1=malloc(sizeof(struct node));
    new1->data=item;
    ptr=*h1;
    while(ptr->next!=*h1)
       ptr=ptr->next;
    ptr->next=new1;
    new1->next=*h1;
 }
 void deleteatbeg(struct node **h1)
 {
   struct node *ptr,*ptr1;
   ptr=*h1;
   ptr1=*h1;
   while(ptr->next!=*h1)
      ptr=ptr->next;
   *h1=(*h1)->next;
   ptr->next=*h1;
   free(ptr1);
   printf("\n FIRST NODE DeleteETED !!!");
 }

 void deleteatmid(struct node **h1)
 {
   struct node *ptr1,*ptr;
   int item;
   printf("\n\n ENTER The Element TO BE DeleteETED :: ");
   scanf("%d",&item);
   ptr1=ptr=*h1;
   while(ptr->next!=*h1 && ptr->data!=item)
   {
    ptr1=ptr;
    ptr=ptr->next;
   }
   if(ptr==*h1)
   {
    while(ptr->next!=*h1)
      ptr=ptr->next;
    *h1=(*h1)->next;
    ptr->next=*h1;
    free(ptr1);
   }
   else if(ptr->data!=item)
    printf("\n\t\t Element NOT FOUND !!!");
   else
   {
    ptr1->next=ptr->next;
    free(ptr);
   }
 }

 void deleteatend(struct node **h1)

 {
   struct node *ptr,*ptr1;
   ptr1=ptr=*h1;
   while(ptr->next!=*h1)
   {
    ptr1=ptr;
    ptr=ptr->next;
   }
   ptr1->next=*h1;
   free(ptr);
   printf("\n Last Node Deleted !!!");
 }

 void display(struct node **h1)
 {
   struct node *ptr;
   ptr=*h1;
   do
   {
     printf("%d  ",ptr->data);
     ptr=ptr->next;
   }while(ptr!=*h1);
 }

Post a Comment