C program to implement single linked list

Posted: April 1, 2012 in Linked list
# include<stdio.h>
# include<conio.h>
# include<stdlib.h>
struct node
{ int data;
struct node *link;
};
void append(struct node **,int);
void in_begin(struct node **,int);
void del(struct node **,int);
void in_middle(struct node **,int,int);
int count(struct node *);
void display(struct node *);
 
int main()
{ struct node *p; /* p can be said as the head or a start ptr */
p=NULL;
/* Printing the menu */
int num,loc;
char choice;
	while(1)
	{
		fflush(stdin);
printf("\nPROGRAM TO IMPLEMENT SINGLY LINKED LIST ");
printf("\n=====================================");
printf("\n\n1.Create \\ Appending The List");
printf("\n2.Insert Node At Begining");
printf("\n3.Insert Node In Middle");
printf("\n4.Deleting a Node");
printf("\n5.Counting The No Of Nodes");
printf("\n6.Displaying the list");
printf("\n7.Exit");
printf("\n\nEnter ur Choice : ");
scanf("%c",&choice);
switch(choice)
{
 case '1':
			{
char ans;
				int a=1;
				while(a)
				{
printf("Enter any number : ");
scanf("%d",&num);
append(&p,num);
					fflush(stdin);
printf("Enter more (y/n) :");
scanf("%c",&ans);
					if(ans=='n')
						a=0;
				}

break;
			}
case '2':
printf("Enter The Data : ");
scanf("%d",&num);
in_begin(&p,num);
break;
 
case '3':
printf("\nEnter The Position :");
scanf("%d",&loc);
printf("\nEnter The Data : ");
scanf("%d",&num);
in_middle(&p,loc,num);
break;
 
case '4':
printf("\nEnter The Data u Want To Delete : ");
scanf("%d",&num);
del(&p,num);
break;
 
case '5':
printf("\nThe No Of Nodes Are %d",count(p));
break;
 
case '6':
display(p);
break;
 
case '7':
printf("\n\nQuiting.......");
break;
 
default:
printf("Invalid choice.Please Enter Correct Choice\n");

 
}
 
}
	return 0;
 
}
 
void append(struct node **q,int num)
{ struct node *temp,*r;
temp = *q;
if(*q==NULL)
{ temp = (struct node *)malloc(sizeof(struct node));
temp->data=num;
temp->link=NULL;
*q=temp;
}
else
{ temp = *q;
while(temp->link !=NULL)
{ temp=temp->link;
}
r = (struct node *)malloc(sizeof(struct node));
r->data=num;
r->link=NULL;
temp->link=r;
}
}
 
void display(struct node *q)
{ if(q==NULL)
{ printf("\n\nEmpty Link List.Can't Display The Data\n\n");
}
	else
while(q!=NULL)
{ printf("\n%d\n",q->data);
q=q->link;
}

}
 
int count(struct node *q)
{ int c=0;
if(q==NULL)
{ printf("Empty Link List.\n");

goto last;
}
while(q!=NULL)
{ c++;
q=q->link;
}
last:
return c;
 
}
 
void in_begin(struct node **q,int num)
{ struct node *temp;
if(*q==NULL)
{ printf("Link List Is Empty.Can't Insert.\n");
}
else
{ temp=(struct node *)malloc(sizeof(struct node));
temp->data=num;
temp->link=*q;
*q=temp; /* pointing to the first node */
}
}
 
void in_middle(struct node **q,int loc,int num)
{ struct node *temp,*n;
int c=1,flag=0;
temp=*q;
if(*q==NULL)
{ printf("\n\nLink List Is Empty.Can't Insert.\n");
}
else
while(temp!=NULL)
{ if(c==loc)
{ n = (struct node *)malloc(sizeof(struct node));
n->data=num;
n->link=temp->link;
temp->link=n;
flag=1;
}
c++;
temp=temp->link;
}
if(flag==0)
{ printf("\n\nNode Specified Doesn't Exist.Cant Enter The Data");

}
else
{ printf("Data Inserted");

}
}
 
void del(struct node**q,int num)
{ if(*q==NULL)
{ printf("\n\nEmpty Linked List.Cant Delete The Data.\n\n");

}
else
{
struct node *old,*temp;

		old=(struct node*)malloc(sizeof(struct node));
int flag=0;
temp=*q;
while(temp!=NULL)
{ if(temp->data==num)
{ if(temp==*q) /* First Node case */
*q=temp->link; /* shifted the header node */
else
old->link=temp->link;
 
free(temp);
flag=1;
				break;
}
else
{ 
				old=temp;

temp=temp->link;
}
}
if(flag==0)
printf("\nData Not Found...\n");
else
printf("\nData Deleted...");

}

}
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s