Tuesday, 31 January 2017

Basic Operations in Singly Linked List


Following are the basic operations supported by a list.
In series of linked list , we studied  Linked List Types

In this section will see operation of Linked List

Operation in Linked List:
  1. Insertion −  Adds an element at the beginning of the list.
  2. Deletion  −  Deletes an element at the beginning of the list.
  3. Display    −  Displays the complete list.
  4. Search     −  Searches an element using the given key.
  5. Delete      −  Deletes an element using the given key.


#include<stdio.h>
#include<stdlib.h>
 
struct node
{
    int data;
    struct node *next;
}*head;
 
 
 
void append(int num)
{
    struct node *temp,*right;
    temp= (struct node *)malloc(sizeof(struct node));
    temp->data=num;
    right=(struct node *)head;
    while(right->next != NULL)
    right=right->next;
    right->next =temp;
    right=temp;
    right->next=NULL;
}
 
 
 
void add( int num )
{
    struct node *temp;
    temp=(struct node *)malloc(sizeof(struct node));
    temp->data=num;
    if (head== NULL)
    {
      head=temp;
      head->next=NULL;
    }
    else
    {
      temp->next=head;
      head=temp;
    }
}
void addafter(int num, int loc)
{
    int i;
    struct node *temp,*left,*right;
    right=head;
    for(i=1;i<loc;i++)
    {
      left=right;
      right=right->next;
    }
    temp=(struct node *)malloc(sizeof(struct node));
    temp->data=num;
    left->next=temp;
    left=temp;
    left->next=right;
    return;
}
 
 
 
void insert(int num)
{
    int c=0;
    struct node *temp;
    temp=head;
    if(temp==NULL)
    {
      add(num);
    }
    else
    {
      while(temp!=NULL)
      {
        if(temp->data<num)
        c++;
        temp=temp->next;
      }
      if(c==0)
        add(num);
      else if(c<count())
        addafter(num,++c);
      else
        append(num);
    }
}
 
 

int delete(int num)
{
    struct node *temp, *prev;
    temp=head;
    while(temp!=NULL)
    {
      if(temp->data==num)
      {
         if(temp==head)
         {
            head=temp->next;
            free(temp);
            return 1;
          }
          else
          {
             prev->next=temp->next;
             free(temp);
             return 1;
          }
        }
        else
        {
           prev=temp;
           temp= temp->next;
        }
      }
    return 0;
}
 
 
void  display(struct node *r)
{
    r=head;
    if(r==NULL)
    {
      return;
    }
    while(r!=NULL)
    {
       printf("%d ",r->data);
       r=r->next;
    }
    printf("\n");
}
 
 
int count()
{
    struct node *n;
    int c=0;
    n=head;
    while(n!=NULL)
    {
      n=n->next;
      c++;
    }
    return c;
}
 
 
int  main()
{
    int i,num;
    struct node *n;
    head=NULL;
    while(1)
    {
    printf("\nList Operations\n");
    printf("===============\n");
    printf("1.Insert\n");
    printf("2.Display\n");
    printf("3.Size\n");
    printf("4.Delete\n");
    printf("5.Exit\n");
    printf("Enter your choice : ");
    if(scanf("%d",&i)<=0){
        printf("Enter only an Integer\n");
        exit(0);
    } else {
        switch(i)
        {
        case 1:      
                 printf("Enter the number to insert : ");
                 scanf("%d",&num);
                 insert(num);
                 break;
        case 2:     
                if(head==NULL)
                {
                   printf("List is Empty\n");
                }
                else
                {
                   printf("Element(s) in the list are : ");
                }
                display(n);
                break;
        case 3:     
                printf("Size of the list is %d\n",count());
                break;
        case 4:     
                if(head==NULL)
                  printf("List is Empty\n");
                else {
                  printf("Enter the number to delete : ");
                  scanf("%d",&num);
                  if(delete(num))
                    printf("%d deleted successfully\n",num);
                  else
                    printf("%d not found in the list\n",num);
                }
                break;
        case 5:     
                return 0;
        default:    
                printf("Invalid option\n");
        }
    }
  }
    return 0;
}

No comments:

Post a Comment