C Program In Circular Linked List

Ram Pothuraju
/*Operations on Circular linked list */
#include  < stdio.h>
#include  < conio.h>


typedef struct  node
 {
       int  data;
       struct node *link;
  }node;
node *start=NULL;
node *create(node *);
node *display(node *);
node *insert_beg(node *);
node *insert_end(node *);
node *insert_before(node *);
node *insert_after(node *);
node *delete_beg(node *);
node *delete_end(node *);
node *delete_node(node *);
node *delete_after(node *);
node *delete_list(node *);

void main()
 {
 int choice;
 clrscr();
 do
   {
  printf("\n1)Create a List.\n2)display\n3)Insert at beg\n4)Insert at end \n5)Insert before given node\n6)Insert after given node\n7)Delete from beg\n8)Delete from end\n9)Delete given node\n10)Delete node after given node\n11)Delete list");
  printf("\n12)Quit");
  printf("\nEnter your Choice : ");
  scanf("%d",&choice);
  switch(choice)
    {
   case 1: start=create(start);
    printf("\n Linked List created.");
    break;
   case 2: start = display(start);
    break;
   case 3: start = insert_beg(start);
    break;
   case 4: start = insert_end(start);
    break;
   case 5: start = insert_before(start);
    break;
   case 6: start = insert_after(start);
    break;
   case 7: start = delete_beg(start);
    break;
   case 8: start = delete_end(start);
    break;
   case 9: start = delete_node(start);
    break;
   case 10: start = delete_after(start);
    break;
   case 11: start = delete_list(start);
    break;
  }
 }while(choice!=12);
 getch();
 return 0;
   }

node *create(node *start)
  {
 int val,n,i;
 node *new_node, *ptr;
 printf("\n Enter no of data");
 scanf("%d",&n);
 for(i=0;i < n;i++)
    {
  printf("\n Next Data : ");
  scanf("%d",&val);
  if(start==NULL) // inserting the first node
       {
         start=(node *) malloc(sizeof(node));
         start->data = val;
         start->link = start;
       }
  else
       {
   new_node=(node *) malloc(sizeof(node));
   new_node->data=val;

   ptr=start;
   while(ptr->link != start)
      ptr = ptr->link;

   new_node->link=start;
   ptr->link = new_node;
      }
    }

  return(start);
  }

node *display(node *start)
 {
 node *ptr;
 printf("\n Data stored in the circular linked list : ");
 ptr=start;
 printf("\n");
 if(start==NULL)
    printf("List is empty.\n");
 else
      {
 while(ptr->link != start)
 {
    printf("\t %d", ptr->data);
    ptr = ptr->link;
 }
 printf("\t %d", ptr->data);
      }
 return(start);
 }

node *insert_beg(node *start)
 {
 node *new_node, *ptr;
 int no;
 printf("\n Enter data: ");
 scanf("%d",&no);
 new_node=(node*)malloc(sizeof(node));
 new_node->data = no;


 for(ptr=start; ptr->link != start; ptr = ptr->link);

 if(start==NULL)
    new_node->link = new_node;
 else
 {
    new_node->link = start;
    ptr->link = new_node;
  }
 start = new_node;

  return(start);
 }

 node *insert_end(node *start)
 {
 node *new_node,*ptr;
 int no;
 printf("\n Enter data: ");
 scanf("%d",&no);
 new_node=(node*)malloc(sizeof(node));
 new_node->data = no;

 if(start==NULL)
 {
    new_node->link=new_node;
    start=new_node;
 }
 else
 {
    ptr=start;
    while(ptr->link != start)
        ptr=ptr->link;

// for(ptr=start; ptr->link!=NULL; ptr=ptr->link);

 ptr->link = new_node;
 new_node->link = start;
 }

 return(start);
 }

  node *insert_before(node *start)
 {
 node *new_node,*ptr,*prev;
 int val,no;

 printf("\n Enter value before which data has to be inserted: ");
 scanf("%d",&val);
 new_node=(node*)malloc(sizeof(node));


 ptr=start;
 if(ptr->data == val)
    start = insert_beg(start);
 else
 {
    printf("\n Enter data to insert: ");
    scanf("%d",&no);
    new_node->data = no;
    while(ptr->data != val)
    {
       prev = ptr;
       ptr = ptr->link;
    }

    new_node->link = ptr;
    prev->link = new_node;
 }
 return(start);
 }

  node *insert_after(node *start)
 {
 node *new_node,*ptr,*prev;
 int val,no;
 if(start==NULL)
    start = insert_end(start);
 else
 {
 printf("\n Enter data to insert: ");
 scanf("%d",&no);
 printf("\n Enter value after which data has to be inserted: ");
 scanf("%d",&val);
 new_node=(node*)malloc(sizeof(node));
 new_node->data = no;

 ptr=start;
 if(ptr->data == val)
 {
    new_node->link = ptr->link;
    ptr->link = new_node;
 }
 else
 {
   while(ptr->data != val)
       ptr = ptr->link;

    new_node->link = ptr->link;
    ptr->link = new_node;
 }
       }
 return(start);
 }

 node *delete_beg(node *start)
 {
 node *ptr;

 ptr=start;
 if(ptr->link == start)
 {
    start=NULL;
    free(ptr);
 }
 else
 {
   while(ptr->link != start)
       ptr = ptr->link;

 ptr->link = start->link;
 free(start);
 start = ptr->link;
 }


 return(start);
 }

node *delete_end(node *start)
 {
 node *ptr, *prev;

 ptr=start;
 if(ptr->link == start)
    start=NULL;
 else
 {
   while(ptr->link != start)
  {
    prev=ptr;
    ptr=ptr->link;
  }
  prev->link=ptr->link;
 }
 free(ptr);

 return(start);
 }
node *delete_node(node *start)
 {
 node *ptr, *prev;
 int val;
 printf("\n Enter value of node to be deleted; ");
 scanf("%d",&val);

 ptr=start;
 if(ptr->data == val)
 {
    start=delete_beg(start);
    return(start);
 }
 else
 {
   while(ptr->data != val)
   {
      prev = ptr;
      ptr=ptr->link;
   }
   prev->link = ptr->link;
   free(ptr);
   return(start);
 }
 }
 node *delete_after(node *start)
 {
 node *ptr,*next;
 int val;
 printf("\n Enter value after which node has to be deleted: ");
 scanf("%d",&val);

 ptr=start;

 while(ptr->data != val)
 {
      ptr=ptr->link;
 }
  next = ptr->link;
  ptr->link = next->link;

  if(ptr->link == start)
     start = ptr->link;

   free(ptr);
   return(start);
 }
node *delete_list(node *start)
 {
       node *ptr;
       ptr = start;
/*  while(ptr->link != start)
      start = delete_end(start);
*/
 while(start != NULL)
   start = delete_end(start);

  free(start);
  return(start);
 }



OUTPUT



1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 1

 Enter no of data 2

 Next Data : 22

 Next Data : 33

 Linked List created.
1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 3

 Enter data: 11


1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 5

 Enter value before which data has to be inserted: 44

 Enter data to insert: 35

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 6

 Enter data to insert: 55

 Enter value after which data has to be inserted: 44





1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 2

 Data stored in the circular linked list :
         11      22      33      35      44      55

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 7










1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 8

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 9

 Enter value of node to be deleted; 35

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 2

 Data stored in the circular linked list :
         22      33      44

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 11



1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 2

 Data stored in the circular linked list :
List is empty./*Operations on Circular linked list */
#include  < stdio.h>
#include  < conio.h>

typedef struct  node
 {
       int  data;
       struct node *link;
  }node;
node *start=NULL;
node *create(node *);
node *display(node *);
node *insert_beg(node *);
node *insert_end(node *);
node *insert_before(node *);
node *insert_after(node *);
node *delete_beg(node *);
node *delete_end(node *);
node *delete_node(node *);
node *delete_after(node *);
node *delete_list(node *);

void main()
 {
 int choice;
 clrscr();
 do
   {
  printf("\n1)Create a List.\n2)display\n3)Insert at beg\n4)Insert at end \n5)Insert before given node\n6)Insert after given node\n7)Delete from beg\n8)Delete from end\n9)Delete given node\n10)Delete node after given node\n11)Delete list");
  printf("\n12)Quit");
  printf("\nEnter your Choice : ");
  scanf("%d",&choice);
  switch(choice)
    {
   case 1: start=create(start);
    printf("\n Linked List created.");
    break;
   case 2: start = display(start);
    break;
   case 3: start = insert_beg(start);
    break;
   case 4: start = insert_end(start);
    break;
   case 5: start = insert_before(start);
    break;
   case 6: start = insert_after(start);
    break;
   case 7: start = delete_beg(start);
    break;
   case 8: start = delete_end(start);
    break;
   case 9: start = delete_node(start);
    break;
   case 10: start = delete_after(start);
    break;
   case 11: start = delete_list(start);
    break;
  }
 }while(choice!=12);
 getch();
 return 0;
   }

node *create(node *start)
  {
 int val,n,i;
 node *new_node, *ptr;
 printf("\n Enter no of data");
 scanf("%d",&n);
 for(i=0;i < n;i++)
    {
  printf("\n Next Data : ");
  scanf("%d",&val);
  if(start==NULL) // inserting the first node
       {
         start=(node *) malloc(sizeof(node));
         start->data = val;
         start->link = start;
       }
  else
       {
   new_node=(node *) malloc(sizeof(node));
   new_node->data=val;

   ptr=start;
   while(ptr->link != start)
      ptr = ptr->link;

   new_node->link=start;
   ptr->link = new_node;
      }
    }

  return(start);
  }

node *display(node *start)
 {
 node *ptr;
 printf("\n Data stored in the circular linked list : ");
 ptr=start;
 printf("\n");
 if(start==NULL)
    printf("List is empty.\n");
 else
      {
 while(ptr->link != start)
 {
    printf("\t %d", ptr->data);
    ptr = ptr->link;
 }
 printf("\t %d", ptr->data);
      }
 return(start);
 }

node *insert_beg(node *start)
 {
 node *new_node, *ptr;
 int no;
 printf("\n Enter data: ");
 scanf("%d",&no);
 new_node=(node*)malloc(sizeof(node));
 new_node->data = no;


 for(ptr=start; ptr->link != start; ptr = ptr->link);

 if(start==NULL)
    new_node->link = new_node;
 else
 {
    new_node->link = start;
    ptr->link = new_node;
  }
 start = new_node;

  return(start);
 }

 node *insert_end(node *start)
 {
 node *new_node,*ptr;
 int no;
 printf("\n Enter data: ");
 scanf("%d",&no);
 new_node=(node*)malloc(sizeof(node));
 new_node->data = no;

 if(start==NULL)
 {
    new_node->link=new_node;
    start=new_node;
 }
 else
 {
    ptr=start;
    while(ptr->link != start)
        ptr=ptr->link;

// for(ptr=start; ptr->link!=NULL; ptr=ptr->link);

 ptr->link = new_node;
 new_node->link = start;
 }

 return(start);
 }

  node *insert_before(node *start)
 {
 node *new_node,*ptr,*prev;
 int val,no;

 printf("\n Enter value before which data has to be inserted: ");
 scanf("%d",&val);
 new_node=(node*)malloc(sizeof(node));


 ptr=start;
 if(ptr->data == val)
    start = insert_beg(start);
 else
 {
    printf("\n Enter data to insert: ");
    scanf("%d",&no);
    new_node->data = no;
    while(ptr->data != val)
    {
       prev = ptr;
       ptr = ptr->link;
    }

    new_node->link = ptr;
    prev->link = new_node;
 }
 return(start);
 }

  node *insert_after(node *start)
 {
 node *new_node,*ptr,*prev;
 int val,no;
 if(start==NULL)
    start = insert_end(start);
 else
 {
 printf("\n Enter data to insert: ");
 scanf("%d",&no);
 printf("\n Enter value after which data has to be inserted: ");
 scanf("%d",&val);
 new_node=(node*)malloc(sizeof(node));
 new_node->data = no;

 ptr=start;
 if(ptr->data == val)
 {
    new_node->link = ptr->link;
    ptr->link = new_node;
 }
 else
 {
   while(ptr->data != val)
       ptr = ptr->link;

    new_node->link = ptr->link;
    ptr->link = new_node;
 }
       }
 return(start);
 }

 node *delete_beg(node *start)
 {
 node *ptr;

 ptr=start;
 if(ptr->link == start)
 {
    start=NULL;
    free(ptr);
 }
 else
 {
   while(ptr->link != start)
       ptr = ptr->link;

 ptr->link = start->link;
 free(start);
 start = ptr->link;
 }


 return(start);
 }

node *delete_end(node *start)
 {
 node *ptr, *prev;

 ptr=start;
 if(ptr->link == start)
    start=NULL;
 else
 {
   while(ptr->link != start)
  {
    prev=ptr;
    ptr=ptr->link;
  }
  prev->link=ptr->link;
 }
 free(ptr);

 return(start);
 }
node *delete_node(node *start)
 {
 node *ptr, *prev;
 int val;
 printf("\n Enter value of node to be deleted; ");
 scanf("%d",&val);

 ptr=start;
 if(ptr->data == val)
 {
    start=delete_beg(start);
    return(start);
 }
 else
 {
   while(ptr->data != val)
   {
      prev = ptr;
      ptr=ptr->link;
   }
   prev->link = ptr->link;
   free(ptr);
   return(start);
 }
 }
 node *delete_after(node *start)
 {
 node *ptr,*next;
 int val;
 printf("\n Enter value after which node has to be deleted: ");
 scanf("%d",&val);

 ptr=start;

 while(ptr->data != val)
 {
      ptr=ptr->link;
 }
  next = ptr->link;
  ptr->link = next->link;

  if(ptr->link == start)
     start = ptr->link;

   free(ptr);
   return(start);
 }
node *delete_list(node *start)
 {
       node *ptr;
       ptr = start;
/*  while(ptr->link != start)
      start = delete_end(start);
*/
 while(start != NULL)
   start = delete_end(start);

  free(start);
  return(start);
 }



OUTPUT



1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 1

 Enter no of data 2

 Next Data : 22

 Next Data : 33

 Linked List created.
1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 3

 Enter data: 11


1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 5

 Enter value before which data has to be inserted: 44

 Enter data to insert: 35

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 6

 Enter data to insert: 55

 Enter value after which data has to be inserted: 44





1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 2

 Data stored in the circular linked list :
         11      22      33      35      44      55

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 7










1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 8

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 9

 Enter value of node to be deleted; 35

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 2

 Data stored in the circular linked list :
         22      33      44

1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 11



1)Create a List.
2)display
3)Insert at beg
4)Insert at end
5)Insert before given node
6)Insert after given node
7)Delete from beg
8)Delete from end
9)Delete given node
10)Delete node after given node
11)Delete list
12)Quit
Enter your Choice : 2

 Data stored in the circular linked list :
List is empty.

Post a Comment

0Comments

Post a Comment (0)