Written by Sai Sandeep Thota on April 13, 2013 in C > Programming

C Program to implement Singly Linked List

GET ALERTS:

Get our Latest updates delivered to your mailbox!

Linked list is the one of the important concepts of Data Structures. They are stored in non-contiguous memory spaces. They are very powerful and easy to learn. First let us deal with Singly Linked list. You need to be familiar with pointers concept.

A Single Linked List will may contain many nodes which comprises two parts. One is Data Part and the other is the Address of the next Node. The structure will look something like this:
node

After looking at the figure above you would have got an idea about how a node looks like. The Data field comprises the data you enter and the address field comprises the address of the next node. We have first and last nodes here. Last node address value will be set to NULL.
single

We will be using structures concept here. We will be declaring a integer variable for data and a pointer to node. We have first and last pointers which will be set to NULL at the beginning. We will be using Dynamic Memory allocation malloc to create new node.

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void create();
void insert_atfirst();
void insert_atlast();
void insert();
void delete_bypos();
void delete_byval();
void display();
int menu();
struct node
{
	int data;
	struct node *next;
}*first=NULL,*last=NULL,*temp=NULL;
void main()
{
	int ch;
	clrscr();
	do{
		ch=menu();

		switch(ch)
		{
			case 1:create();
				break;
			case 2:insert_atfirst();
				break;
			case 3:insert_atlast();
				break;
			case 4:insert();
				break;
			case 5:delete_bypos();
				break;
			case 6:delete_byval();
				break;
			case 7:display();
				break;
			case 8:exit(0);
			case 9:clrscr();
			default:printf("\nError-->Enter a valid choice!!");
				exit(0);
		}
	}while(1);
}

void create()
{
	temp=(struct node*)malloc(sizeof(struct node));
	printf("\nEnter the Data in the Node:");
	scanf("%d",&temp->data);
	temp->next=NULL;
	if(first==NULL)
	{
		first=temp;
		last=temp;
	}
	else
	{
		last->next=temp;
		last=temp;
	}
}

void insert_atfirst()
{
	temp=(struct node*)malloc(sizeof(struct node));
	printf("\nEnter Element:");
	scanf("%d",&temp->data);
	temp->next=first;
	first=temp;
}
void insert()
{
	struct node *t, *t1;
	int pos, count=1,AB;
	printf("\nEnter Position to be inserted:");
	scanf("%d",&pos);
	printf("\nAfter[1] or Before[2]:");
	scanf("%d",&AB);
	temp=(struct node*)malloc(sizeof(struct node));
	printf("\nEnter data:");
	scanf("%d",&temp->data);
	temp->next=NULL;
	t=t1=first;
	while(t!=NULL)
	{
		if(pos==count)
			break;
		else
		{
			t=t1;
			t=t->next;
			count++;
		}
	}
	if(AB==1)
	{
		temp->next=t->next;
		t->next=temp;
	}
	else if(AB==2)
	{
		temp->next=t;
		t1->next=temp;
	}
	else
		printf("\nInvalid Input");
}

void insert_atlast()
{
	temp=(struct node*)malloc(sizeof(struct node));
	printf("\nEnter value to be inserted at last:");
	scanf("%d",&temp->data);
	last->next=temp;
	last=temp;
}

void delete_bypos()
{
	struct node *t,*t1;
	int pos, count=1;
	printf("\nEnter the Position of the element you would like to delete:");
	scanf("%d",&pos);
	t=t1=first;
	while(t!=NULL)
	{
		if(pos==count)
		t1=t;
		t=t->next;
		count++;
	}
	if(pos==1)
	{
		first=t->next;
		printf("\nExceuted-->First Node is deleted!!");
	}
	else if(t==last)
	{
		t1->next=NULL;
		free(t);
		printf("\nExecuted-->Last Node is deleted!!");
	}
	else
	{
		t1->next=t->next;
		free(t);
		printf("\nExecuted-->Node has been deleted!!");
	}
}

void delete_byval()
{
	int val, count=1;
	struct node *t,*t1;
	printf("\nEnter value:");
	scanf("%d",&val);
	t=t1=first;
	while(t!=NULL)
	{
		if(val==t->data)
		break;
		else
		{
		t=t->next;
		count++;
		}
	}
	if(t==first)
	{
		first=t->next;
		free(t);
	}
	else if(first==last)
	{
		t1->next=NULL;
		free(t);
		last=t1;
	}
	else
	{
		t1->next=t->next;
		free(t);
	}
}
void display()
{
	temp=first;
	while(temp!=NULL)
	{
	printf("|%d|%d| --> ",temp->data,temp->next);
	temp=temp->next;
	}
}

int menu()
{
	int ch;
	printf("\n------------");
	printf("\nSingle Linked List");
	printf("\n------------");
	printf("\n1.Create\n2.Insert at first\n3.Insert at last\n4.Insert at Middle\n5.Delete by Position\n6.Delete by Value\n7.Display\n8.Exit");
	printf("\n\n-->Enter Your Choice:");
	scanf("%d",&ch);
	return ch;
}

Output:
single-linked-list

{ 0 comments… add one now }

Leave a Comment

Previous post:

Next post: