Singly Linked List to implement Insertions,Deletions,Traversal,Splitting,Merging,Counting Node & Sorting in C program.
CODING:
#include<stdio.h>
#include<conio.h>
struct node{
int no;
struct node *next;
};
int flag=0;
struct node *splitlist;
struct node *start=NULL;
struct node *creatlist(struct node *);
struct node *display(struct node *);
struct node *inserrecord(struct node *);
struct node *insertlast(struct node *);
struct node *insertbefore(struct node *);
struct node *insertafter(struct node *);
struct node *insert_po(struct node *);
struct node *deletebeg(struct node *);
struct node *deletelast(struct node *);
struct node *deletenode(struct node *);
struct node *sort(struct node *);
struct node *split(struct node *);
struct node *merge(struct node *);
struct node *count(struct node *);
void main()
{
int ch;
clrscr();
printf("\nC R E A T E THE LIST...");
start=creatlist(start);
do
{
printf("\n -------------------------");
printf("\n| 1.OPEN THE LIST |");
printf("\n| 2.ADD AT FIRST IN LIST |");
printf("\n| 3.ADD AT LAST IN LIST |");
printf("\n| 4.BEFORE ADD IN LIST |");
printf("\n| 5.ADD AT GIVEN POSITION|");
printf("\n| 6.AFTER ADD IN LIST |");
printf("\n| 7.DELETE FIRST IN LIST |");
printf("\n| 8.DELETE GIVEN IN LIST |");
printf("\n| 9.DELETE LAST IN LIST |");
printf("\n|10.SORTING IN LIST |");
printf("\n|11.SPLINTING IN LIST |");
printf("\n|12:MERGING IN LIST |");
printf("\n|13.COUNTING OPERATIONS |");
printf("\n| 0.EXIT |");
printf("\n -------------------------");
printf("\nENTER THE CHOICE:");
scanf("%d",&ch);
switch(ch)
{
case 1:
start=display(start);
break;
case 2:
start=inserrecord(start);
printf("\n->First Record Added.");
break;
case 3:
start=insertlast(start);
printf("\n->Last Record Added.");
break;
case 4:
start=insertbefore(start);
printf("\n->Before Record Added.");
break;
case 5:
start=insert_po(start);
printf("->Record Added.");
break;
case 6:
start=insertafter(start);
printf("\n->After Record Added.");
break;
case 7:
start=deletebeg(start);
printf("\n->First Record Deleted.");
break;
case 8:
start=deletenode(start);
printf("\n->Record Deleted.");
break;
case 9:
start=deletelast(start);
printf("\n->Last Record Deleted.");
break;
case 10:
start=sort(start);
printf("\n->Your List is Soretd.");
break;
case 11:
start=split(start);
break;
case 12:
start=merge(start);
break;
case 13:
start=count(start);
break;
case 0:
exit(0);
break;
default:
printf("->INVALID ENTER NUMBER,TRY AGAIN!");
}
}while(ch!=0);
getch();
}
struct node *creatlist(struct node *start)
{
struct node *new_node;
int num;
printf("\nENTER '-1' FOR SAVE THE LIST.");
printf("\nEnter The Number:");
scanf("%d",&num);
while(num!=-1)
{
new_node=(struct node*)malloc(sizeof(struct node*));
new_node->no=num;
if(start==NULL)
{
new_node->next=NULL;
start=new_node;
}
else
{
new_node->next=start;
start=new_node;
}
printf("Enter The Number:");
scanf("%d",&num);
}
printf("->Your List Saved.");
return start;
}
struct node *display(struct node *start)
{
struct node *ptr;
ptr=start;
printf("\nLIST OPEN:");
while(ptr!=NULL)
{
printf("\n %d",ptr->no);
ptr=ptr->next;
}
if(flag==1)
{
ptr=splitlist;
printf("\nSPLITTED LIST:");
while(ptr!=NULL)
{
printf("\n %d",ptr->no);
ptr=ptr->next;
}
printf("\n->ADD,DELETE,SORT ARE NOT WORK IN 'SPLITTED LIST'.");
}
return start;
}
struct node *inserrecord(struct node *start)
{
int no;
struct node *new_record;
printf("\nEnter The Number:");
scanf("%d",&no);
new_record=(struct node*)malloc(sizeof(struct node));
new_record->no=no;
new_record->next=start;
start=new_record;
return start;
}
struct node *deletebeg(struct node *start)
{
struct node *ptr;
ptr=start;
start=start->next;
free(ptr);
return start;
}
struct node *insertlast(struct node *start)
{
struct node *ptr,*new_record;
int num;
printf("\nEnter The Number:");
scanf("%d",&num);
new_record=(struct node *)malloc(sizeof(struct node));
ptr=start;
new_record->no=num;
while(ptr->next!=NULL)
ptr=ptr->next;
ptr->next=new_record;
new_record->next=NULL;
return start;
}
struct node *deletelast(struct node *start)
{
struct node *ptr,*last;
ptr=start;
while(ptr->next!=NULL)
{
last=ptr;
ptr=ptr->next;
}
last->next=NULL;
free(ptr);
return start;
}
struct node *insertbefore(struct node *start)
{
struct node *ptr,*new_node,*preptr;
int num,no;
printf("\nEnter The Before Number of Added In List:");
scanf("%d",&no);
if(start->no==no)
{
start=inserrecord(start);
}
else
{
printf("\nEnter The Number:");
scanf("%d",&num);
ptr=start;
new_node=(struct node *)malloc(sizeof(struct node));
new_node->no=num;
while(ptr->no!=no)
{
preptr=ptr;
ptr=ptr->next;
}
new_node->next=ptr;
preptr->next=new_node;
}
return start;
}
struct node *insert_po(struct node *start)
{
struct node *ptr,*new_node;
int no,n;
printf("Enter The Position You Want To Added:");
scanf("%d",&n);
if(n==1)
{
start=inserrecord(start);
}
else
{
printf("Enter The Number:");
scanf("%d",&no);
new_node=(struct node *)malloc(sizeof(struct node));
new_node->no=no;
ptr=start;
while(2<n){
ptr=ptr->next;
n--;}
new_node->next=ptr->next;
ptr->next=new_node;
}
return start;
}
struct node *insertafter(struct node *start)
{
struct node *ptr,*preptr,*new_node;
int no,num;
printf("\nEnter The Number:");
scanf("%d",&num);
printf("\nEnter The After Number of Added In List:");
scanf("%d",&no);
new_node= (struct node *)malloc(sizeof(struct node));
new_node->no=num;
ptr=start;
while(preptr->no!=no)
{
preptr=ptr;
ptr=ptr->next;
}
new_node->next=ptr;
preptr->next=new_node;
return start;
}
struct node *deletenode(struct node *start)
{
struct node *ptr,*preptr;
int num;
printf("Enter The Number:");
scanf("%d",&num);
ptr=start;
if(ptr->no==num)
{
start=deletebeg(start);
return start;
}
else
{
while(ptr->no!=num)
{
preptr=ptr;
ptr=ptr->next;
}
}
preptr->next=ptr->next;
free(ptr);
return start;
}
struct node *sort(struct node *start)
{
struct node *ptr1,*ptr2;
int temp;
ptr1=start;
while(ptr1->next!=NULL)
{
ptr2=ptr1->next;
while(ptr2!=NULL)
{
if(ptr1->no>ptr2->no)
{
temp=ptr1->no;
ptr1->no=ptr2->no;
ptr2->no=temp;
}
ptr2=ptr2->next;
}
ptr1=ptr1->next;
}
return start;
}
struct node *split(struct node *start)
{
int i;
struct node *s;
if(flag==0)
{
printf("Enter The Position of Split:");
scanf("%d",&i);
s=start;
while(i>1)
{
s=s->next;
i--;
}
splitlist=s->next;
s->next=NULL;
s=start;
flag=1;
printf("\n->Your List is Splitted.");
}
else{printf("SORRY,Your List is Already Splitted");}
return start;
}
struct node *merge(struct node *start)
{
struct node *ptr;
ptr=start;
if(flag==0)
{
printf("SORRY,You have note Splitted List.");
}
else
{
while(ptr->next!=NULL)
ptr=ptr->next;
ptr->next=splitlist;
flag=0;
printf("->Your List Merged.");
}
return start;
}
struct node *count(struct node *start)
{
struct node *ptr;
int odd=0,even=0,cu=0;
ptr=start;
while(ptr!=NULL)
{
if(ptr->no%2==0)
{
printf("\nEVEN:%d",ptr->no);even++;
}
else
{
printf("\nODD :%d",ptr->no);odd++;
}
ptr=ptr->next;
cu++;
}
printf("\nEVEN Number of Nodes:%d",even);
printf("\nODD Number of Nodes:%d",odd);
printf("\nTotal Number Of Nodes:%d",cu);
return start;
}
CODING:
#include<stdio.h>
#include<conio.h>
struct node{
int no;
struct node *next;
};
int flag=0;
struct node *splitlist;
struct node *start=NULL;
struct node *creatlist(struct node *);
struct node *display(struct node *);
struct node *inserrecord(struct node *);
struct node *insertlast(struct node *);
struct node *insertbefore(struct node *);
struct node *insertafter(struct node *);
struct node *insert_po(struct node *);
struct node *deletebeg(struct node *);
struct node *deletelast(struct node *);
struct node *deletenode(struct node *);
struct node *sort(struct node *);
struct node *split(struct node *);
struct node *merge(struct node *);
struct node *count(struct node *);
void main()
{
int ch;
clrscr();
printf("\nC R E A T E THE LIST...");
start=creatlist(start);
do
{
printf("\n -------------------------");
printf("\n| 1.OPEN THE LIST |");
printf("\n| 2.ADD AT FIRST IN LIST |");
printf("\n| 3.ADD AT LAST IN LIST |");
printf("\n| 4.BEFORE ADD IN LIST |");
printf("\n| 5.ADD AT GIVEN POSITION|");
printf("\n| 6.AFTER ADD IN LIST |");
printf("\n| 7.DELETE FIRST IN LIST |");
printf("\n| 8.DELETE GIVEN IN LIST |");
printf("\n| 9.DELETE LAST IN LIST |");
printf("\n|10.SORTING IN LIST |");
printf("\n|11.SPLINTING IN LIST |");
printf("\n|12:MERGING IN LIST |");
printf("\n|13.COUNTING OPERATIONS |");
printf("\n| 0.EXIT |");
printf("\n -------------------------");
printf("\nENTER THE CHOICE:");
scanf("%d",&ch);
switch(ch)
{
case 1:
start=display(start);
break;
case 2:
start=inserrecord(start);
printf("\n->First Record Added.");
break;
case 3:
start=insertlast(start);
printf("\n->Last Record Added.");
break;
case 4:
start=insertbefore(start);
printf("\n->Before Record Added.");
break;
case 5:
start=insert_po(start);
printf("->Record Added.");
break;
case 6:
start=insertafter(start);
printf("\n->After Record Added.");
break;
case 7:
start=deletebeg(start);
printf("\n->First Record Deleted.");
break;
case 8:
start=deletenode(start);
printf("\n->Record Deleted.");
break;
case 9:
start=deletelast(start);
printf("\n->Last Record Deleted.");
break;
case 10:
start=sort(start);
printf("\n->Your List is Soretd.");
break;
case 11:
start=split(start);
break;
case 12:
start=merge(start);
break;
case 13:
start=count(start);
break;
case 0:
exit(0);
break;
default:
printf("->INVALID ENTER NUMBER,TRY AGAIN!");
}
}while(ch!=0);
getch();
}
struct node *creatlist(struct node *start)
{
struct node *new_node;
int num;
printf("\nENTER '-1' FOR SAVE THE LIST.");
printf("\nEnter The Number:");
scanf("%d",&num);
while(num!=-1)
{
new_node=(struct node*)malloc(sizeof(struct node*));
new_node->no=num;
if(start==NULL)
{
new_node->next=NULL;
start=new_node;
}
else
{
new_node->next=start;
start=new_node;
}
printf("Enter The Number:");
scanf("%d",&num);
}
printf("->Your List Saved.");
return start;
}
struct node *display(struct node *start)
{
struct node *ptr;
ptr=start;
printf("\nLIST OPEN:");
while(ptr!=NULL)
{
printf("\n %d",ptr->no);
ptr=ptr->next;
}
if(flag==1)
{
ptr=splitlist;
printf("\nSPLITTED LIST:");
while(ptr!=NULL)
{
printf("\n %d",ptr->no);
ptr=ptr->next;
}
printf("\n->ADD,DELETE,SORT ARE NOT WORK IN 'SPLITTED LIST'.");
}
return start;
}
struct node *inserrecord(struct node *start)
{
int no;
struct node *new_record;
printf("\nEnter The Number:");
scanf("%d",&no);
new_record=(struct node*)malloc(sizeof(struct node));
new_record->no=no;
new_record->next=start;
start=new_record;
return start;
}
struct node *deletebeg(struct node *start)
{
struct node *ptr;
ptr=start;
start=start->next;
free(ptr);
return start;
}
struct node *insertlast(struct node *start)
{
struct node *ptr,*new_record;
int num;
printf("\nEnter The Number:");
scanf("%d",&num);
new_record=(struct node *)malloc(sizeof(struct node));
ptr=start;
new_record->no=num;
while(ptr->next!=NULL)
ptr=ptr->next;
ptr->next=new_record;
new_record->next=NULL;
return start;
}
struct node *deletelast(struct node *start)
{
struct node *ptr,*last;
ptr=start;
while(ptr->next!=NULL)
{
last=ptr;
ptr=ptr->next;
}
last->next=NULL;
free(ptr);
return start;
}
struct node *insertbefore(struct node *start)
{
struct node *ptr,*new_node,*preptr;
int num,no;
printf("\nEnter The Before Number of Added In List:");
scanf("%d",&no);
if(start->no==no)
{
start=inserrecord(start);
}
else
{
printf("\nEnter The Number:");
scanf("%d",&num);
ptr=start;
new_node=(struct node *)malloc(sizeof(struct node));
new_node->no=num;
while(ptr->no!=no)
{
preptr=ptr;
ptr=ptr->next;
}
new_node->next=ptr;
preptr->next=new_node;
}
return start;
}
struct node *insert_po(struct node *start)
{
struct node *ptr,*new_node;
int no,n;
printf("Enter The Position You Want To Added:");
scanf("%d",&n);
if(n==1)
{
start=inserrecord(start);
}
else
{
printf("Enter The Number:");
scanf("%d",&no);
new_node=(struct node *)malloc(sizeof(struct node));
new_node->no=no;
ptr=start;
while(2<n){
ptr=ptr->next;
n--;}
new_node->next=ptr->next;
ptr->next=new_node;
}
return start;
}
struct node *insertafter(struct node *start)
{
struct node *ptr,*preptr,*new_node;
int no,num;
printf("\nEnter The Number:");
scanf("%d",&num);
printf("\nEnter The After Number of Added In List:");
scanf("%d",&no);
new_node= (struct node *)malloc(sizeof(struct node));
new_node->no=num;
ptr=start;
while(preptr->no!=no)
{
preptr=ptr;
ptr=ptr->next;
}
new_node->next=ptr;
preptr->next=new_node;
return start;
}
struct node *deletenode(struct node *start)
{
struct node *ptr,*preptr;
int num;
printf("Enter The Number:");
scanf("%d",&num);
ptr=start;
if(ptr->no==num)
{
start=deletebeg(start);
return start;
}
else
{
while(ptr->no!=num)
{
preptr=ptr;
ptr=ptr->next;
}
}
preptr->next=ptr->next;
free(ptr);
return start;
}
struct node *sort(struct node *start)
{
struct node *ptr1,*ptr2;
int temp;
ptr1=start;
while(ptr1->next!=NULL)
{
ptr2=ptr1->next;
while(ptr2!=NULL)
{
if(ptr1->no>ptr2->no)
{
temp=ptr1->no;
ptr1->no=ptr2->no;
ptr2->no=temp;
}
ptr2=ptr2->next;
}
ptr1=ptr1->next;
}
return start;
}
struct node *split(struct node *start)
{
int i;
struct node *s;
if(flag==0)
{
printf("Enter The Position of Split:");
scanf("%d",&i);
s=start;
while(i>1)
{
s=s->next;
i--;
}
splitlist=s->next;
s->next=NULL;
s=start;
flag=1;
printf("\n->Your List is Splitted.");
}
else{printf("SORRY,Your List is Already Splitted");}
return start;
}
struct node *merge(struct node *start)
{
struct node *ptr;
ptr=start;
if(flag==0)
{
printf("SORRY,You have note Splitted List.");
}
else
{
while(ptr->next!=NULL)
ptr=ptr->next;
ptr->next=splitlist;
flag=0;
printf("->Your List Merged.");
}
return start;
}
struct node *count(struct node *start)
{
struct node *ptr;
int odd=0,even=0,cu=0;
ptr=start;
while(ptr!=NULL)
{
if(ptr->no%2==0)
{
printf("\nEVEN:%d",ptr->no);even++;
}
else
{
printf("\nODD :%d",ptr->no);odd++;
}
ptr=ptr->next;
cu++;
}
printf("\nEVEN Number of Nodes:%d",even);
printf("\nODD Number of Nodes:%d",odd);
printf("\nTotal Number Of Nodes:%d",cu);
return start;
}
Comments
Post a Comment