Wednesday 25 October 2017

Single Linked List Complete Program in C



Algorithm to insert a node at the beginning of single linked list:
Let head be a pointer that stores the address of first node
step 1: Read the value to inserted into linked list
step 2: create a new node using malloc function
step 3: Assign the value read to the data field of newnode (newnode -> data =value)
step 4: set the next of newnode to head (newnode ->next = head)
step 5: set the head pointer to newnode (head = newnode)




Algorithm to insert a node at the end of single linked list:
Let head be a pointer that stores the address of first node
step 1: Read the value to inserted into linked list
step 2: create a new node using malloc function
step 3: Assign the value read to the data field of newnode
step 4: if there is no linked list then newnode becomes first node
step 5: otherwise go to the lastnode in linked list
                                        Step 5.1: attach newnode to last node (lastnode ->next = newnode)
                                        Step 5.2: newnode->next = NULL
 





Algorithm to insert a node at a given position of single linked list:
Let head be a pointer that stores the address of first node
step 1: Read the value to inserted into linked list and the position at which newnode has to be inserted
step 2: create a new node using malloc function
step 3: Assign the value read to the data field of newnode
step 4: store the node before the given position in a pointer c
step 5: newnode->next = c->next
step 6: c->next = newnode
  


 


Algorithm to delete a node at the beginning of single linked list:
Let head be a pointer that stores the address of first node
step 1: If there is no linked list then print Linked list is empty
step 2: If linked list exists
                                        step 2.1: delete the first node
                                        step 2.2: second node becomes first node 


Algorithm to delete a node at the end of single linked list:
Let head be a pointer that stores the address of first node
step 1: If there is no linked list then print Linked list is empty
step 2: If linked list exists
                    step 2.1: move to last but one node and store the address of last but one node in pointer c
                    step 2.2: store the address of last node in pointer p and detele the last node (free(p))
                    step 2.3: c->next = NULL



Algorithm to delete a node at given position of single linked list:
Let head be a pointer that stores the address of first node
step 1: If there is no linked list then print Linked list is empty
step 2: If linked list exists
                                        step 2.1: Read the position at which the node has to deleted
                                        step 2.2: Store the address of node before the to be deleted node in pointer c
                                        step 2.3: c->next = c->next->next
                             
step 2.4: delete the node at given position






Algorithm to display the elements of single linked list
Let head be a pointer that stores the address of first node
step 1: If there is no linked list then print Linked list is empty
step 2: If linked list exists store the address of first node in pointer c ( c = head)
                step 2.1: print the data field in c (print c->data)
                step 2.2 move c to store the address of next node ( c =  c-> next)
step 3: go to step 2 until c is not equal to NULL

Program


#include <stdio.h>
#include <stdlib.h>
struct node
{
               int data;
               struct node *next;
};
struct node *head =NULL,*c,*p;
create()
{
               int value;
               printf("enter the value ");
               scanf("%d",&value);
               struct node *new = (struct node *)malloc(sizeof(struct node));
               new->data=value;
               new->next=NULL;
               if(head == NULL)
               {
                              head=new;
               }
               else
               {
                              c=head;
                              while(c->next != NULL)
                              {
                                             c=c->next;
                              }
                              c->next=new;                   
               }
}

insertbeg(int value)
{
               struct node *new = (struct node *)malloc(sizeof(struct node));
               new->data=value;
              
               new->next=head;
               head = new;
}
insertend(int value)
{
               struct node *new = (struct node *)malloc(sizeof(struct node));
               new->data=value;
               c=head;
               while(c->next != NULL)
               {
                              c=c->next;
               }
              
               c->next=new;
               new->next=NULL;
}
insertmiddle(int value)    
{
               int pos;
               printf("enter the position at which new node has to be inserted");
               scanf("%d",&pos);
               struct node *new = (struct node *)malloc(sizeof(struct node));
               new->data=value;
               c=head;
               int i=1;
               while(i<pos)
               {
                              p=c;
                              c=c->next;
                              i++;
               }
               new->next=c;
               p->next=new;
}

deletebeg()
{
               p=head;
               head=head->next;
               free(p);
}

deletemiddle()
{
    int pos, i=1;
               printf("enter the position of the node that has to be deleted");
               scanf("%d",&pos);
               c=head;
               while(i<pos)
               {
                              p=c;
                              c=c->next;
                              i++;
               }
               p->next=c->next;
               free(c);
}

deleteend()
{
               c=head;
               while(c->next != NULL)
               {
                              p=c;
                              c=c->next;
               }
               free(p->next);
               p->next=NULL;
}
display()
{
               if(head == NULL)
                              printf("list is empty");
               else
               {
                              c=head;
                              while(c->next !=NULL)
                              {
                                             printf("%d -> ",c->data);
                                             c=c->next;
                              }
                              printf("%d\n",c->data);
               }
}

main()
{
               int choice,option,value;
               while(1)
               {
                              printf("Press 1. Create\n 2. Insert \n 3. Delete  \n 4. Display\n 5. Exit \n");
                              printf("enter ur choice");
                              scanf("%d",&choice);
                              switch(choice)
                              {
                                             case 1: create();
                                                                           break;
                                             case 2:
                                               if(head != NULL)            
                                               {
                                                                           option=0;
                                                                           while(option != 4)
                                                                           {
                                                                                                        
                                                                                          printf("Press 1. insert as first node  \n 2. insert as middle node  \n 3. insert as last node \n 4. go to main menu\n");
                                                                                          printf("enter ur choice\n");
                                                                                          scanf("%d",&option);
                                                                                          if(option != 4)
                                                                                          {
                                                                                                         printf("enter the value ");
                                                                                                         scanf("%d",&value);
                                                                                          }
                                                                                          switch(option)
                                                                                          {
                                                                                         
                                                                                                         case 1: insertbeg(value);
                                                                                                                                       display();
                                                                                                                                       break;
                                                                                                         case 2: insertmiddle(value);
                                                                                                                                       display();
                                                                                                                                       break;
                                                                                                         case 3: insertend(value);
                                                                                                                                       display();
                                                                                                                                       break;
                                                                                                         case 4:  break;
                                                                                                         default: printf("invalid choice\n");
                                                                                          }
                                                                           }
                                             }
                                             else
                                                            printf("list is empty");
                                             break;
                                             case 3:
                                                                           option=0;
                                                                           if(head != NULL)
                                                                           {
                                                                                          while(option != 4)
                                                                                          {
                                                                          
                                                                                                         printf("Press 1. delete first node  \n 2. delete middle node  \n 3. Delete last node \n 4. go to main menu\n");
                                                                                                         printf("enter ur choice\n");
                                                                                                         scanf("%d",&option);
                                                                                                         switch(option)
                                                                                                         {
                                                                                         
                                                                                                                        case 1: deletebeg();
                                                                                                                                                      display();
                                                                                                                                                      break;
                                                                                                                        case 2: deletemiddle();
                                                                                                                                                      display();
                                                                                                                                                      break;
                                                                                                                        case 3: deleteend();
                                                                                                                                                      display();
                                                                                                                                                      break;
                                                                                                                        case 4:  break;
                                                                                                                        default: printf("invalid choice\n");
                                                                                                         }
                                                                                          }
                                                                           }
                                                                           else
                                                                                          printf("list is empty and cannot be deleted");
                                                                                          break;
                                             case 4: display();
                                                                           break;
                                             case 5: exit(0);
                                             default: printf("invalid choice");
                              }
                             
               }
}

No comments:

Post a Comment