Complete Single Linked List Program in C

Description : Single linked list inplementation using different functions
1.INSERT A NUMBER AT THE BEGINNING
2.INSERT A NUMBER AT LAST
3.INSERT A NUMBER AT A PARTICULAR LOCATION IN LIST
4.PRINT THE ELEMENTS IN THE LIST 5.PRINT THE TOTAL NUMBER OF ELEMENTS IN THE LIST
6.DELETE A NODE IN THE LINKED LIST
7.REVERSE A LINKED LIST
8.GET OUT OF LINKED LIST (BYEE BYEE):

Code :

/* PROGRAM IMPLEMENTATION OF SINGLE LINKED LIST */

#include"stdio.h"
//#define NULL 0
/* STRUCTURE CONTANING A DATA PART AND A LINK PART */

struct node
{
int data;
struct node *next;
}*p;

/* P IS A GLOBAL POINTER CONTAINS THE ADRESS OF THE FIRST NODE IN
LIST
*/

/*THIS FUNCTION DELETES A NODE */

delnode(int num)
{
struct node *temp, *m;
temp=p;
while(temp!=NULL)
{
if(temp->data==num)
{
if(temp==p)
{
p=temp->next;
free(temp);
return;
}
else
{
m->next=temp->next;
free(temp);
return;
}
}else
{
m=temp;
temp= temp->next;
}

}
printf("
ELEMENT %d NOT FOUND
", num);
}/*THIS FUNCTION ADDS A NODE AT THE LAST OF LINKED LIST */

append( int num )
{
struct node *temp,*r;
/* CREATING A NODE AND ASSIGNING A VALUE TO IT */

temp= (struct node *)malloc(sizeof(struct node));
temp->data=num;
r=(struct node *)p;

if (p == NULL) /* IF LIST IS EMPTY CREATE FIRST NODE */
{
p=temp;
p->next =NULL;
}
else
{ /* GO TO LAST AND ADD*/

while( r->next != NULL)
r=r->next;
r->next =temp;
r=temp;
r->next=NULL;
}
}/* ADD A NEW NODE AT BEGINNING */

addbeg( int num )
{
/* CREATING A NODE AND INSERTING VALUE TO IT */

struct node *temp;
temp=(struct node *)malloc(sizeof(struct node));
temp->data=num;

/* IF LIST IS NULL ADD AT BEGINNING */
if ( p== NULL)
{
p=temp;
p->next=NULL;
}

else
{
temp->next=p;
p=temp;
}
}

/* ADD A NEW NODE AFTER A SPECIFIED NO OF NODES */

addafter(int num, int loc)
{
int i;
struct node *temp,*t,*r;
r=p; /* here r stores the first location */
if(loc > count()+1 || loc <= 0)
{
printf("
insertion is not possible :
");
return;
}
if (loc == 1)/* if list is null then add at beginning */
{
addbeg(num);
return;
}
else
{
for(i=1;i
{
t=r; /* t will be holding previous value */
r=r->next;
}
temp=(struct node *)malloc(sizeof(struct node));
temp->data=num;
t->next=temp;
t=temp;
t->next=r;
return;
}
}/* THIS FUNCTION DISPLAYS THE CONTENTS OF THE LINKED LIST */

display(struct node *r)
{
r=p;
if(r==NULL)
{
printf("NO ELEMENT IN THE LIST :");
return;
}
/* traverse the entire linked list */
while(r!=NULL)
{
printf(" -> %d ",r->data);
r=r->next;
}
printf("
);

}
//THIS FUNCTION COUNTS THE NUMBER OF ELEMENTS IN THE LIST
count()
{
struct node *n;
int c=0;
n=p;
while(n!=NULL)
{
n=n->next;
c++;
}
return(c);
}
//THIS FUNCTION REVERSES A LINKED LIST
reverse(struct node *q)
{
struct node *m, *n,*l,*s;
m=q;
n=NULL;
while(m!=NULL)
{
s=n;
n=m;
m=m->next;
n->next=s;
}
p=n;
}


/* THIS IS THE MAIN PROGRAM */

main()
{
int i;
p=NULL;
while(1) /* this is an indefinite loop */
{
printf("
1.INSERT A NUMBER AT BEGINNING;
);

printf("
2.INSERT A NUMBER AT LAST:
);

printf("
3.INSERT A NUMBER AT A PARTICULAR LOCATION INlIST:
);

printf("
4.PRINT THE ELEMENTS IN THE LIST :
);

printf("
5.PRINT THE NUMBER OF ELEMENTS IN THE LIST
);

printf("
6.DELETE A NODE IN THE LINKED LIST:
);

printf("
7.REVERSE A LINKED LIST :
);

printf("
8.GET OUT OF LINKED LIST (BYEE BYEE):
);

printf("
PLEASE, ENTER THE NUMBER:");

scanf("%d",&i); /* ENTER A VALUE FOR SWITCH */

switch(i)
{
case 1:
{
int num;
printf("
PLEASE ENTER THE NUMBER :-");
scanf("%d",&num);
addbeg(num);
break;
}
case 2:
{
int num;
printf("
PLEASE ENTER THE NUMBER :-");
scanf("%d",&num);
append(num);
break;
}

case 3:
{
int num, loc,k;
printf("
PLEASE ENTER THE NUMBER :-");
scanf("%d",&num);
printf("
PLEASE ENTER THE LOCATION NUMBER :-");
scanf("%d",&loc);
addafter(num,loc);
break;
} case 4:
{
struct node *n;
printf("

THE ELEMENTS IN THE LIST ARE :
);

display(n);
break;
}

case 5:
{
struct node *n;
display(n);
printf(" TOTAL NO OF ELEMENTS IN THE LSIT ARE %d",count());
break;
} case 6:
{
int num;
printf("
PLEASE ENTER A NUMBER FROM THE LIST :");
scanf("%d",&num);
delnode(num);
break;
}
case 7:
{
reverse(p);
display(p);
break;
}
case 8:
{
exit();
}
}/* end if switch */
}/* end of while */
}/* end of main */


     

No comments:

Post a Comment