Thursday, 11 October 2012

C Program for Singly Linked List Operations

 

C Program for Singly Linked List Operations

 
 
#include <stdlib.h>
#include <string.h>
typedef struct node
{
    int sid;
    char sname[25];
    int ssem;
    struct node *link;
}NODE;
 
NODE *InsFront(NODE *, int, char *, int);
NODE *InsBack(NODE *, int, char *, int);
NODE *InsPos(NODE *, int, char *, int,int);
NODE *DelNode(NODE *, int);
NODE *SrchUpdate(NODE *, int);
void Display(NODE *);
 
main()
{
    NODE *start=NULL;   /* Main Program */
    int opn,id,sem,p,insopn;
    char name[25];
    do
    {
        clrscr();
        printf("\n ### Linked List Operations ### \n\n");
        printf("\n Press 1-Insertion, 2-Deletion, 3-Search, 4-Display,5-Exit\n");
        printf("\n Your option ? ");
        scanf("%d",&opn);
        switch(opn)
        {
        case 1: printf("Insertion at: Press 1->Front 2->Back 3->Pos ? ");
            scanf("%d",&insopn);
            printf("\n\nRead the Sid,Name, and Sem details ?");
            scanf("%d%s%d",&id,name,&sem);
            if( insopn == 1) start=InsFront(start,id,name,sem);
            else if(insopn == 2) start=InsBack(start,id,name,sem);
            else if(insopn == 3)
            {
                printf(" At What Position ? ");
                scanf("%d",&p);
                start=InsPos(start,id,name,sem,p);
            }
            break;
 
        case 2: printf(" Read the Student Id of the Node to be deleted ? ");
            scanf("%d",&id);
            start=DelNode(start,id);
            break;
        case 3: printf(" Read the Student Id of the Node to be Searched ? ");
            scanf("%d",&id);
            start=SrchUpdate(start,id);
            break;
        case 4: printf(" Linked List is \n");
            Display(start); break;
        case 5: printf("\n\n Terminating \n\n"); break;
        default: printf("\n\nInvalid Option !!! Try Again !! \n\n");
            break;
        }
        printf("\n\n\n\n  Press a Key to Continue . . . ");
        getch();
    }while(opn != 5);
}
 
NODE *InsFront(NODE *st, int id, char *name, int sem)
{
    NODE *temp;
    temp=(NODE *)malloc(sizeof(NODE));
    if( temp == NULL)
    { printf(" Out of Memory !! Overflow !!!");
    return(st);
    }
    else
    {
        temp->sid=id;
        strcpy(temp->sname,name);
        temp->ssem=sem;
        temp->link=st;
        printf(" Node has been inserted at Front Successfully !!");
        return(temp);
    }
}
 
NODE *InsBack(NODE *st, int id, char *name, int sem)
{
    NODE *temp,*t;
    temp=(NODE *)malloc(sizeof(NODE));
    if( temp == NULL)
    { printf(" Out of Memory !! Overflow !!!");
    return(st);
    }
    else
    {
        temp->sid=id;
        strcpy(temp->sname,name);
        temp->ssem=sem;
        temp->link=NULL;
        if(st == NULL) return(temp);
        else
        {
            t=st;
            while( t->link != NULL)
                t=t->link;
            t->link=temp;
            printf(" Node has been inserted at Back Successfully !!");
            return(st);
        }
    }
}
 
NODE *InsPos(NODE *st, int id, char *name, int sem, int pos)
{
    NODE *temp,*t,*prev;
    int cnt;
    temp=(NODE *)malloc(sizeof(NODE));
    if( temp == NULL)
    { printf(" Out of Memory !! Overflow !!!");
    return(st);
    }
    else
    {
        temp->sid=id;
        strcpy(temp->sname,name);
        temp->ssem=sem;
        temp->link=NULL;
        if(pos == 1)    /* Front Insertion */
        { temp->link=st;
        return(temp);
        }
        else
        {
            t=st; cnt=1;
            while( t != NULL && cnt != pos)
            {
                prev=t;
                t=t->link;
                cnt++;
            }
            if(t) /* valid Position  Insert new node*/
            {
                prev->link=temp;
                temp->link=t;
            }
            else
                printf(" Invalid Position !!!");
            printf(" Node has been inserted at given Position  Successfully !!");
            return(st);
        }
    }
}
 
NODE *DelNode(NODE *st, int id)
{
    NODE *t,*prev;
    if( st ==  NULL) { printf(" Underflow!!!"); return(st); }
    else
    { t=st;
    if(st->sid == id)    /* Front Deletion */
    { st=st->link;
    t->link=NULL;
    free(t);
    return(st);
    }
    else
    {
        while( t != NULL && t->sid != id)
        {
            prev=t;
            t=t->link;
        }
        if(t) /* node to be deleted  found*/
        {
            prev->link=t->link;
            t->link=NULL;
            free(t);
        }
        else
            printf(" Invalid Student Id !!!");
        return(st);
    }
    }
}
 
NODE *SrchUpdate(NODE *st, int id)
{
    NODE *t;
    if( st ==  NULL) { printf(" Empty List !!"); return(st); }
    else
    {  t=st;
    while( t != NULL && t->sid != id)
    {
        t=t->link;
    }
    if(t) /* node to be Updated found*/
    {
        printf(" Node with Student Id %d found inthe List !\n",id);
        printf(" Read the New Id,Name and Sem forthe Student\n");
        scanf("%d%s%d",t->sid,t->sname,t->ssem);
    }
    else
        printf(" Invalid Student Id !!!");
    return(st);
    }
}
 
void Display(NODE *st)
{ 
 NODE *t;
 if( st == NULL) printf("Empty List\n");
 else
 {
  t=st;
  printf("Start->");
  while(t)
  {
   printf("[%d,%s,%d]->",t->sid,t->sname,t->ssem);
   t=t->link;
  }
  printf("Null\n");
 }
}

No comments:

Post a Comment