SINGLE LINKED LIST
A Menu Driven Program In C
The Basic Declarations
#include<stdio.h>
#include<stdlib.h>
void mainmenu(), create(), display(), insert(), insert_first(),insert_between(),insert_end(), deletion(),
delete_first(),delete_position(),delete_end(),
sort(),reverse(),find();
int count();
struct node
{
int info;
struct node *link;
};
typedef struct node NODE;
NODE *start=NULL;
int main()
{
mainmenu();
}
The Mainmenu Function
void mainmenu()
{
int choice,x;
while(1)
{
printf("n----MAIN MENU----n");
printf("1. Create.n");
printf("2. Display.n");
printf("3. Insert.n");
printf("4. Count.n");
printf("5. Delete.n");
printf("6. Sorting.n");
printf("7. Reverse.n");
printf("8. Find.n");
printf("9. Exit.n");
printf("Enter choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: create();
break;
case 2: display();
break;
case 3: insert();
break;
case 4: x=count();
printf("The number of elements are %d",x);
break;
case 5: deletion();
break;
case 6: sort();
break;
case 7: reverse();
break;
case 8: find();
break;
case 9: exit(0);
break;
default: printf("Enter a valid choice.");
}
}
}
Creation Of Nodes
void create()
{
NODE *temp, *traverse;
int data;
temp=(NODE *) malloc(sizeof(NODE));
printf("Enter an integer value: ");
scanf("%d",&data);
temp->info=data;
temp->link=NULL;
if(start==NULL)
{
start=temp;
}
else
{
traverse=start;
while(traverse->link!=NULL)
{
traverse=traverse->link;
}
traverse->link=temp;
}
}
Display Of The Nodes
void display()
{
NODE *traverse;
if(start==NULL)
{
printf("There are no nodes to be displayed. The list is
empty.n");
}
else
{
traverse=start;
printf("The linked list is: n");
while(traverse!=NULL)
{
printf("%d ",traverse->info);
traverse=traverse->link;
}
}
}
The Insert Menu
void insert()
{
int choice;
while(1)
{
printf("n---Insert Menu---n");
printf("1. Insert at first position.n");
printf("2. Insert in between.n");
printf("3. Insert at the end.n");
printf("4. Go to main menun");
printf("5. Exitn");
printf("Enter choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: insert_first();
break;
case 2: insert_between();
break;
case 3: insert_end();
break;
case 4: mainmenu();
break;
case 5: exit(0);
break;
default: printf("Enter a valid choice.");
}
}
}
Insert Node At The First Position
void insert_first()
{
NODE *temp;
if(start==NULL)
{
printf("List is empty. Create as the first node.n");
create();
}
else
{
int data;
printf("Enter an integer value: ");
scanf("%d",&data);
temp=(NODE *)malloc(sizeof(NODE));
temp->info=data;
temp->link=NULL;
temp->link=start;
start=temp;
}
display();
}
Insert Node At Any Position
void insert_between()
{
NODE *temp,*traverse;
traverse=start;
int data,position,i,total_nodes;
printf("Enter the position where you want to insert: ");
scanf("%d", &position);
total_nodes=count();
if(start==NULL)
{
printf("List is empty. Create as the first node.n");
create();
}
else if(position>total_nodes)
{
printf("There are only %d elements.n",total_nodes);
}
else
{
printf("Enter an integer value: ");
scanf("%d",&data);
temp = (NODE *)malloc(sizeof(NODE));
temp->info=data;
temp->link=NULL;
for(i=0;i<position-2;i++)
{
traverse=traverse->link;
}
temp->link=traverse->link;
traverse->link=temp;
}
display();
}
Insert Node At The End
void insert_end()
{
if(start==NULL)
{
printf("List is empty. Create as the first node.n");
create();
}
else
{
create();
}
}
Counting Of Nodes
int count()
{
NODE *traverse;
int count=0;
traverse=start;
while(traverse!=NULL)
{
traverse=traverse->link;
count=count+1;
}
return count;
}
The Delete Menu
void deletion()
{
int choice;
while(1)
{
printf("n---Delete Menu---n");
printf("1. Delete first node.n");
printf("2. Delete last node.n");
printf("3. Delete by position.n");
printf("4. Go to main menun");
printf("5. Exitn");
printf("Enter choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: delete_first();
break;
case 2: delete_end();
break;
case 3: delete_position();
break;
case 4: mainmenu();
break;
case 5: exit(0);
break;
default: printf("Enter a valid choice.");
}
}
}
Delete The First Node
void delete_first()
{
NODE *delete_node;
if(start==NULL)
{
printf("There are no nodes to be deleted. The list is
empty.n");
}
else
{
delete_node=start;
start=start->link;
free(delete_node);
}
display();
}
Delete The Last Node
void delete_end()
{
NODE *delete_node, *traverse;
if(start==NULL)
{
printf("There are no nodes to be deleted. The list is
empty.n");
}
else
{
traverse=start;
while(traverse->link->link!=NULL)
{
traverse=traverse->link;
}
delete_node=traverse->link;
traverse->link=NULL;
free(delete_node);
}
display();
}
Delete Node At Any Position
void delete_position()
{
NODE *delete_node,*traverse;
if(start==NULL)
{
printf("There are no nodes to be deleted. The list is empty.n");
}
else
{
traverse=start;
int position,i;
printf("Enter the position to be deleted: ");
scanf("%d",&position);
for(i=0;i<position-2;i++)
{
traverse=traverse->link;
}
delete_node=traverse->link;
traverse->link=traverse->link->link;
free(delete_node);
}
display();
}
Sorting
void sort()
{
NODE *traverse1, *traverse2;
int i,j,c,temp;
c=count();
for(i=0;i<c-1;i++)
{
traverse1=start;
traverse2=traverse1->link;
for(j=i+1;j<c;j++)
{
if(traverse1->info>traverse2->info)
{
temp=traverse1->info;
traverse1->info=traverse2->info;
traverse2->info=temp;
}
traverse1=traverse1->link;
traverse2=traverse2->link;
}
}
display();
}
Reversal Of The List
void reverse()
{
NODE *previous, *current, *next;
previous=start;
current=previous->link;
next=current->link;
current->link=previous;
previous->link=NULL;
while(next!=NULL)
{
previous=current;
current=next;
next=next->link;
current->link=previous;
}
start=current;
display();
}
Searching
void find()
{
int iData;
NODE *traverse;
printf("Enter a number to be searched: ");
scanf("%d",&iData);
traverse=start;
while(traverse!=NULL)
{
if(traverse->info==iData)
{
printf("Element found.");
return;
}
else
{
traverse=traverse->link;
}
}
printf("Element not found.");
}
Presented By:
Sayantan Sur
Thank You

Single linked list

  • 1.
    SINGLE LINKED LIST AMenu Driven Program In C
  • 2.
    The Basic Declarations #include<stdio.h> #include<stdlib.h> voidmainmenu(), create(), display(), insert(), insert_first(),insert_between(),insert_end(), deletion(), delete_first(),delete_position(),delete_end(), sort(),reverse(),find(); int count(); struct node { int info; struct node *link; }; typedef struct node NODE; NODE *start=NULL; int main() { mainmenu(); }
  • 3.
    The Mainmenu Function voidmainmenu() { int choice,x; while(1) { printf("n----MAIN MENU----n"); printf("1. Create.n"); printf("2. Display.n"); printf("3. Insert.n"); printf("4. Count.n"); printf("5. Delete.n"); printf("6. Sorting.n"); printf("7. Reverse.n"); printf("8. Find.n"); printf("9. Exit.n"); printf("Enter choice: "); scanf("%d",&choice); switch(choice) { case 1: create(); break; case 2: display(); break; case 3: insert(); break; case 4: x=count(); printf("The number of elements are %d",x); break; case 5: deletion(); break; case 6: sort(); break; case 7: reverse(); break; case 8: find(); break; case 9: exit(0); break; default: printf("Enter a valid choice."); } } }
  • 4.
    Creation Of Nodes voidcreate() { NODE *temp, *traverse; int data; temp=(NODE *) malloc(sizeof(NODE)); printf("Enter an integer value: "); scanf("%d",&data); temp->info=data; temp->link=NULL; if(start==NULL) { start=temp; } else { traverse=start; while(traverse->link!=NULL) { traverse=traverse->link; } traverse->link=temp; } }
  • 5.
    Display Of TheNodes void display() { NODE *traverse; if(start==NULL) { printf("There are no nodes to be displayed. The list is empty.n"); } else { traverse=start; printf("The linked list is: n"); while(traverse!=NULL) { printf("%d ",traverse->info); traverse=traverse->link; } } }
  • 6.
    The Insert Menu voidinsert() { int choice; while(1) { printf("n---Insert Menu---n"); printf("1. Insert at first position.n"); printf("2. Insert in between.n"); printf("3. Insert at the end.n"); printf("4. Go to main menun"); printf("5. Exitn"); printf("Enter choice: "); scanf("%d",&choice); switch(choice) { case 1: insert_first(); break; case 2: insert_between(); break; case 3: insert_end(); break; case 4: mainmenu(); break; case 5: exit(0); break; default: printf("Enter a valid choice."); } } }
  • 7.
    Insert Node AtThe First Position void insert_first() { NODE *temp; if(start==NULL) { printf("List is empty. Create as the first node.n"); create(); } else { int data; printf("Enter an integer value: "); scanf("%d",&data); temp=(NODE *)malloc(sizeof(NODE)); temp->info=data; temp->link=NULL; temp->link=start; start=temp; } display(); }
  • 8.
    Insert Node AtAny Position void insert_between() { NODE *temp,*traverse; traverse=start; int data,position,i,total_nodes; printf("Enter the position where you want to insert: "); scanf("%d", &position); total_nodes=count(); if(start==NULL) { printf("List is empty. Create as the first node.n"); create(); } else if(position>total_nodes) { printf("There are only %d elements.n",total_nodes); } else { printf("Enter an integer value: "); scanf("%d",&data); temp = (NODE *)malloc(sizeof(NODE)); temp->info=data; temp->link=NULL; for(i=0;i<position-2;i++) { traverse=traverse->link; } temp->link=traverse->link; traverse->link=temp; } display(); }
  • 9.
    Insert Node AtThe End void insert_end() { if(start==NULL) { printf("List is empty. Create as the first node.n"); create(); } else { create(); } }
  • 10.
    Counting Of Nodes intcount() { NODE *traverse; int count=0; traverse=start; while(traverse!=NULL) { traverse=traverse->link; count=count+1; } return count; }
  • 11.
    The Delete Menu voiddeletion() { int choice; while(1) { printf("n---Delete Menu---n"); printf("1. Delete first node.n"); printf("2. Delete last node.n"); printf("3. Delete by position.n"); printf("4. Go to main menun"); printf("5. Exitn"); printf("Enter choice: "); scanf("%d",&choice); switch(choice) { case 1: delete_first(); break; case 2: delete_end(); break; case 3: delete_position(); break; case 4: mainmenu(); break; case 5: exit(0); break; default: printf("Enter a valid choice."); } } }
  • 12.
    Delete The FirstNode void delete_first() { NODE *delete_node; if(start==NULL) { printf("There are no nodes to be deleted. The list is empty.n"); } else { delete_node=start; start=start->link; free(delete_node); } display(); }
  • 13.
    Delete The LastNode void delete_end() { NODE *delete_node, *traverse; if(start==NULL) { printf("There are no nodes to be deleted. The list is empty.n"); } else { traverse=start; while(traverse->link->link!=NULL) { traverse=traverse->link; } delete_node=traverse->link; traverse->link=NULL; free(delete_node); } display(); }
  • 14.
    Delete Node AtAny Position void delete_position() { NODE *delete_node,*traverse; if(start==NULL) { printf("There are no nodes to be deleted. The list is empty.n"); } else { traverse=start; int position,i; printf("Enter the position to be deleted: "); scanf("%d",&position); for(i=0;i<position-2;i++) { traverse=traverse->link; } delete_node=traverse->link; traverse->link=traverse->link->link; free(delete_node); } display(); }
  • 15.
    Sorting void sort() { NODE *traverse1,*traverse2; int i,j,c,temp; c=count(); for(i=0;i<c-1;i++) { traverse1=start; traverse2=traverse1->link; for(j=i+1;j<c;j++) { if(traverse1->info>traverse2->info) { temp=traverse1->info; traverse1->info=traverse2->info; traverse2->info=temp; } traverse1=traverse1->link; traverse2=traverse2->link; } } display(); }
  • 16.
    Reversal Of TheList void reverse() { NODE *previous, *current, *next; previous=start; current=previous->link; next=current->link; current->link=previous; previous->link=NULL; while(next!=NULL) { previous=current; current=next; next=next->link; current->link=previous; } start=current; display(); }
  • 17.
    Searching void find() { int iData; NODE*traverse; printf("Enter a number to be searched: "); scanf("%d",&iData); traverse=start; while(traverse!=NULL) { if(traverse->info==iData) { printf("Element found."); return; } else { traverse=traverse->link; } } printf("Element not found."); }
  • 18.