Contact Learn C
Copy

Program 276: Single Linked List

Program 276: Single Linked List

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void InsertAtBeginning(int value);
void InsertAtEnd(int value);
void InsertAtPosition(int value,int position);
void RemoveAtBeginning();
void RemoveAtEnd();
void RemoveAtPosition(int position);
void display();
int CheckEmpty();
struct Node{
 int data;
 struct Node *next;
}* head=NULL;
int main()
{
 int value,choice;
 char c;

 do{
         printf("Enter\n1-Insert\n2-Remove\n3-Display\n");
         scanf("%d",&choice);
 switch(choice)
 {
  case 1:
  {
   int x;
   printf("Enter\n1-Insert at Beginning\n2-Insert at End\n3-Insert at Position\n");
   scanf("%d",&x);
   printf("Enter Value to be Inserted\n");
   scanf("%d",&value);
   switch(x)
   {
    case 1:
    {
     InsertAtBeginning(value);
     break;
    }
    
    case 2:
    {
     InsertAtEnd(value);
     break;
    }
    case 3:
    {
     int position;
     printf("Enter position to insert a value(counted from 0)\n");
     scanf("%d",&position);
     InsertAtPosition(value,position);
     break;
    }
    default :
    {
     printf("Enter Valid Choice\n");
     break;
    }
   }
   
   break;
  }
  
  case 2:
  {
   int x;
   printf("Enter\n1-Delete at Beginning\n2-Delete At End\n3-Delete at Position\n");
   scanf("%d",&x);
   switch(x)
   {
    case 1:
    {
     RemoveAtBeginning();
     break;
    }
    case 2:
    {
     RemoveAtEnd();
     break;
    }
    case 3:
    {
     int position;
     printf("Enter position to be removed starting from 1\n");
     scanf("%d",&position);
     RemoveAtPosition(position);
     break;
    }
    default :
    {
     printf("Enter Valid Choice\n");
     break;
    }
   }
   break;
  }
  case 3:
  {
   display();
   break;
  }
  default:
  {
   printf("Enter Valid Choice\n");
   break;
  }
 }
 printf("Enter 'Y' to continue else any letter\n");
 fflush(stdin);
 c=getche();
 printf("\n");
 }while(c=='Y' || c=='y');
 
 return(0);
}

void InsertAtBeginning(int value){
   struct Node *newNumber;
   newNumber = (struct Node*)malloc(sizeof(struct Node));
   newNumber->data = value;
   if(head == NULL)
   {
      newNumber->next = NULL;
      head = newNumber;
   }
   else
   {
      newNumber->next = head;
      head = newNumber;
   }
   printf("Given Number %d is inserted at beginning Successfully\n",value);
    
}
void InsertAtEnd(int value){
   struct Node *newNumber;
   newNumber = (struct Node*)malloc(sizeof(struct Node));
   newNumber->data = value;
   newNumber->next=NULL;
 if(head==NULL)
 {
  head=newNumber;
 }
 else
 {
  struct Node *temp;
  temp=head;
  while(temp->next!=NULL)
  {
   temp=temp->next;
  }
  temp->next=newNumber;
 }
 
}
void InsertAtPosition(int value,int position){
   struct Node *newNumber,*temp;
   int count,flag;
   newNumber = (struct Node*)malloc(sizeof(struct Node));
   newNumber->data = value;
   temp=head;
   flag=CheckEmpty();
   if(flag==1)
   {
    int flag1=0;
    count=0;
      while(temp!=NULL)
        {
         if(count==position-1)
          {
        flag1=1;
        newNumber->next=temp->next;
           temp->next=newNumber; 
       }
       else
    {
        temp=temp->next;
           
       }
       count++;
          }
            if(flag1==0)
            {
        printf("Entered Position Not available\n"); 
            }
      else
      {
       printf("Given number %d is inserted at position %d successfully\n",value,position);
      }
     } 
     else
     {
      printf("List is Empty\n");
     }
}
void RemoveAtBeginning(){
 int flag=CheckEmpty();
 if(flag==1)
 {
  struct Node *temp;
  temp=head;
  if(temp->next==NULL)
  {
   head=NULL;
   free(temp);
  }
  else{
   head=temp->next;
         free(temp);
  }
     printf("Deleted Successfully\n");
 }
 else
 {
  printf("List is Empty\n");
 }
}
void RemoveAtEnd(){
 int flag=CheckEmpty();
 if(flag==1)
 {
  if(head->next==NULL)
  {
   head=NULL;
  }
  else
  {
   struct Node *temp=head,*temp1;
      while(temp->next!=NULL)
      {
        temp1=temp;
        temp=temp->next;
      } 
      temp1->next=NULL;
      free(temp);
  }
  
 }
 else
 {
  printf("List Empty.Try again!\n");
 }
}
void RemoveAtPosition(int position){
 int flag=CheckEmpty();
 if(flag==1)
 {
  int count=0,flag1=0,i;
  struct Node *temp=head;
   if(position==1)
   {
    head=temp->next;
    free(temp);
    return;
   }
   for(i=0;i<position-2;i++)
   {
        temp=temp->next;
   }
   struct Node *temp1=temp->next;
   temp->next=temp1->next;
   free(temp1);
   
  
 }
 else
 {
  printf("List is empty\n");
 }
 
}

void display(){
 int flag=CheckEmpty();
 if(flag==1)
 {
      struct Node *temp;
     temp=head;
      while(temp->next!=NULL)
     {
      printf("%d->",temp->data);
      temp=temp->next;
      }
      printf("%d",temp->data);
        printf("\n");
 }
 else
 {
  printf("No List Available\n");
 }
}

int CheckEmpty()
{
 if(head==NULL)
 return 0;
 else
 return 1;
}
Explanation:

//Coming Soon

Output:
Single Linked List

Single Linked List

Single Linked List

Single Linked List

Single Linked List

Single Linked List





No comments:

Post a Comment

Donate

Download App and Learn when ever you want

Get it on PlayStore
Get it on Amazon App Store
Get it on Aptoide