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