Home >> Sem 2 >>SINGLY LINK LIST
//download from http://gtu-mca.blogspot.com
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
struct list1
{
int info1;
struct list1 *nxt1;
}* head1=NULL,*node1;
struct list2
{
int info2;
struct list2 *nxt2;
}* head2=NULL,*node2;
void push();
void pop();
void display();
void concate();
void marge();
void insert();
void sort();
void list_union();
void list_intersection();
void list_sum();
void list_count();
void list_rev();
void main()
{
int i=0;
clrscr();
do
{ clrscr();
printf("\n=================MENU===============\n\n");
printf(" 1.) INSERT ELEMENT..................\n");
printf(" 2.) DELETE ELEMENT..................\n");
printf(" 3.) DISPLAY ELEMENT.................\n");
printf(" 4.) INSERT AT PARTICULAR POSITION...\n");
printf(" 5.) CONCATINATE TWO LISTS...........\n");
printf(" 6.) MARGE TWO LISTS.................\n");
printf(" 7.) SORT TWO LISTS..................\n");
printf(" 8.) UNION OF TWO LISTS..............\n");
printf(" 9.) INTERSECTION OF TWO LISTS.......\n");
printf("10.) SUM OF TWO LIST.................\n");
printf("11.) COUNT THE ELEMENTS OF THE LIST..\n");
printf("12.) REVERSR BOTH OF THE LISTS.......\n");
printf("13.) EXIT............................\n");
printf("\nENTER YOUR CHOICE..................");
scanf("%d",&i);
switch(i)
{
case 1: push(); break;
case 2: pop(); break;
case 3: display(); break;
case 4: insert(); break;
case 5: concate(); break;
case 6: marge(); break;
case 7: sort(); break;
case 8: list_union(); break;
case 9: list_intersection(); break;
case 10:list_sum(); break;
case 11:list_count(); break;
case 12:list_rev(); break;
case 13:exit(1);
default :
printf("\n\nENTER NUMBER BETWEEN 1 TO 10 ONLY..");
getch();
}
}while(1);
}
void push()
{
int ch;
printf("\n\nIN WHICH LIST YOU WANT TO INSERT....?");
printf("\n\nLIST - 1 OR LIST - 2..............? ");
scanf("%d",&ch);
if(ch==1)
{
struct list1 *templ1;
templ1 = (struct list1 *) (malloc(sizeof(struct list1)));
printf("\n\nENTER ELEMENT FOR LIST - 1 : ");
scanf("%d",&templ1->info1);
templ1->nxt1 = NULL;
if(head1==NULL)
{ head1 = templ1;
node1 = head1; }
else
{ node1->nxt1 = templ1;
node1 = templ1; }
// free(templ1);
}
else if(ch==2)
{
struct list2 *templ2;
templ2 = (struct list2 *)(malloc(sizeof(struct list2)));
printf("\n\nENTER ELEMENT FOR LIST - 2 : ");
scanf("%d",&templ2->info2);
templ2->nxt2 = NULL;
if(head2==NULL)
{ head2 = templ2;
node2 = head2; }
else
{ node2->nxt2 = templ2;
node2 = templ2; }
// free(templ2);
}
else
{ clrscr();
printf("\n\nENTER ONLY 1 OR 2.....");
getch(); }
}
void pop()
{
struct list1 *deltemp1,*delfind1,*delprev1;
struct list2 *deltemp2,*delfind2,*delprev2;
int ch,pos;
printf("\n\nENTER FROM WHICH LIST YOU WANT TO DELETE....");
printf("\n\nLIST - 1 OR LIST - 2...: ");
scanf("%d",&ch);
if(ch<1||ch>2)
{ clrscr();
printf("\n\nENTER ONLY 1 OR 2.....");
getch(); return; }
display();
printf("\n\nENTER IN WHICH ELEMENT YOU WANT TO DELETE....");
scanf("%d",&pos);
if(ch==1)
{
delfind1 = head1;
if(delfind1==NULL)
{ printf("\n\nLIST - 1 IS EMPTY....");
getch(); }
else if(delfind1->info1==pos)
head1 = delfind1->nxt1;
else
{ delprev1 = head1;
delfind1 = delfind1->nxt1;
while(delfind1->nxt1!=NULL)
{ if(delfind1->info1==pos)
{ delprev1->nxt1 = delfind1->nxt1;
break; }
else
{ delfind1 = delfind1->nxt1;
delprev1 = delprev1->nxt1; }
}
if(delfind1->info1==pos && delfind1->nxt1==NULL)
{ node1 = delprev1;
delprev1->nxt1 = NULL; }
}
}
else
{
delfind2 = delprev2 = head2;
if(delfind2==NULL)
{ printf("\n\nLIST - 2 IS EMPTY....");
getch(); }
else if(delfind2->info2==pos)
head2 = delfind2->nxt2;
else
{ delprev2 = head2;
delfind2 = delfind2->nxt2;
while(delfind2->nxt2!=NULL)
{ if(delfind2->info2==pos)
{ delprev2->nxt2 = delfind2->nxt2;
break; }
else
{ delfind2 = delfind2->nxt2;
delprev2 = delprev2->nxt2; }
}
if(delfind2->info2==pos && delfind2->nxt2==NULL)
{ node2 = delprev2;
delprev2->nxt2 = NULL; }
}
}
}
void display()
{
struct list1 *temp1;
struct list2 *temp2;
printf("\n\nELEMENTS OF LIST-1==");
temp1 = head1;
if(temp1==NULL)
printf(" LIST-1 IS EMPTY....");
else
while(temp1!=NULL)
{ printf("%4d,",temp1->info1);
temp1 = temp1->nxt1; }
printf("\n\nELEMENTS OF LIST-2==");
temp2 = head2;
if(temp2==NULL)
printf(" LIST-2 IS EMPTY....");
else
while(temp2!=NULL)
{ printf("%4d,",temp2->info2);
temp2 = temp2->nxt2; }
getch();
}
void insert()
{
int ch,pos;
printf("\n\nENTER IN WHICH LIST YOU WANT TO INSERT....");
printf("\n\nLIST - 1 OR LIST - 2...: ");
scanf("%d",&ch);
if(ch<1||ch>2)
{ clrscr();
printf("\n\nENTER ONLY 1 OR 2.....");
getch(); return; }
display();
if(ch==1)
{
struct list1 *templ1,*findpos1;
templ1 = (struct list1 *) (malloc(sizeof(struct list1)));
findpos1 = head1;
if(findpos1==NULL)
{ printf("\n\nLIST - 1 IS EMPTY.....");
getch(); }
else
{ printf("\n\nAFTER WHICH ELEMENT YOU WANT TO INSERT..: ");
scanf("%d",&pos);
while(findpos1->info1!=pos&&findpos1!=NULL)
findpos1 = findpos1->nxt1;
if(findpos1->info1==pos)
{ printf("\n\nENTER ELEMENT FOR LIST - 1 : ");
scanf("%d",&templ1->info1);
templ1->nxt1 = findpos1->nxt1;
findpos1->nxt1 = templ1;
}
else
{ printf("\n\nELEMENT NOT FOUND...");
getch(); }
}
}
else
{
struct list2 *templ2,*findpos2;
templ2 = (struct list2 *)(malloc(sizeof(struct list2)));
findpos2 = head2;
if(findpos2==NULL)
{ printf("\n\nLIST - 2 IS EMPTY.....");
getch(); }
else
{ printf("\n\nAFTER WHICH ELEMENT YOU WANT TO INSERT..: ");
scanf("%d",&pos);
while(findpos2->info2!=pos)
findpos2 = findpos2->nxt2;
if(findpos2->info2==pos&&findpos2->info2!=NULL)
{ printf("\n\nENTER ELEMENT FOR LIST - 2 : ");
scanf("%d",&templ2->info2);
templ2->nxt2 = findpos2->nxt2;
findpos2->nxt2 = templ2;
}
else
{ printf("\n\nELEMENT NOT FOUND...");
getch(); }
}
}
}
void concate()
{
struct list1 *temphead1;
struct list2 *temphead2;
temphead1 = head1;
temphead2 = head2;
if(temphead1==NULL&&temphead2==NULL)
{ printf("\n\nBOTH LISTS ARE EMPTY....");
return; }
display();
printf("\n\n=====THE CONCATINATION OF LIST-1 and LIST-2 IS =====\n\n");
if(temphead1==NULL)
while(temphead2!=NULL)
{ printf("%4d,",temphead2->info2);
temphead2 = temphead2->nxt2; }
else if(temphead2==NULL)
while(temphead1!=NULL)
{ printf("%4d,",temphead1->info1);
temphead1 = temphead1->nxt1; }
else
{ while(temphead1!=NULL)
{ printf("%4d,",temphead1->info1);
temphead1 = temphead1->nxt1; }
while(temphead2!=NULL)
{ printf("%4d,",temphead2->info2);
temphead2 = temphead2->nxt2; }
}getch();
}
void marge()
{ struct list1 *temphead1;
struct list2 *temphead2;int comp;
temphead1 = head1;
temphead2 = head2;
sort();
if(temphead1==NULL && temphead2==NULL)
{ printf("\n\nBoth the Lists are EMPTY...");
return; }
printf("\n\n====MARGE of two lists List-1 and List-2====\n\n");
if(temphead1==NULL)
{ while(temphead1!=NULL)
{ printf("%4d ,",temphead1->info1);
temphead1 = temphead1->nxt1; }
}
else if(temphead2==NULL)
{ while(temphead2!=NULL)
{ printf("%4d ,",temphead2->info2);
temphead2 = temphead2->nxt2; }
}
else
{ while(temphead1!=NULL)
{ comp = temphead1->info1;
if(temphead2!=NULL)
{
while(temphead2!=NULL)
{ if(temphead2->info2 <= comp)
{ printf("%4d ,",temphead2->info2);
temphead2 = temphead2->nxt2; }
else if(comp < temphead2->info2)
{ printf("%4d ,",comp);
temphead1 = temphead1->nxt1;
break; }
}
}
else
{ printf("%4d ,",comp);
temphead1 = temphead1->nxt1; }
}
if(temphead2!=NULL)
{ while(temphead2!=NULL)
{ printf("%4d ,",temphead2->info2);
temphead2 = temphead2->nxt2;
}
}
if(temphead1!=NULL)
{ while(temphead1!=NULL)
{ printf("%4d ,",temphead1->info1);
temphead1 = temphead1->nxt1;
}
}
}getch();
}
void sort()
{
int count=0,tempswap;
struct list1 *i1,*j1,*sorttemp1;
sorttemp1 = head1;
if(sorttemp1==NULL)
printf("\n\nLIST-1 IS EMPTY.....");
else if(sorttemp1->nxt1==NULL)
printf("\n\nONLY ONE ELEMENT IS THERE IN LIST-1..");
else
{ i1 = sorttemp1; j1 = i1->nxt1;
do
{ do
{ if(i1->info1 > j1->info1)
{ tempswap = i1->info1;
i1->info1 = j1->info1;
j1->info1 = tempswap; }
j1 = j1->nxt1;
}while(j1->info1!=NULL);
if(count==0) head1 = i1;
count++; i1 = i1->nxt1; j1 = i1->nxt1;
}while((i1->nxt1)!=NULL);
}count=0;
//=================================================
struct list2 *i2,*j2,*sorttemp2;
sorttemp2 = head2;
if(sorttemp2==NULL)
printf("\n\nLIST-2 IS EMPTY.....");
else if(sorttemp2->nxt2==NULL)
printf("\n\nONLY ONE ELEMENT IS THERE IN LIST-2..");
else
{ i2 = sorttemp2; j2 = i2->nxt2;
do
{ do
{ if(i2->info2 > j2->info2)
{ tempswap = i2->info2;
i2->info2 = j2->info2;
j2->info2 = tempswap; }
j2 = j2->nxt2;
}while(j2->info2!=NULL);
if(count==0) head2 = i2;
count++; i2 = i2->nxt2; j2 = i2->nxt2;
}while((i2->nxt2)!=NULL);
}
printf("\n\n=========SORTED LISTS==========\n");
display();
}
void list_union()
{ int flag=0;
struct list1 *temphead1;
struct list2 *temphead2;
temphead1 = head1;
temphead2 = head2;
if(temphead1==NULL&&temphead2==NULL)
{ printf("\n\nBOTH LISTS ARE EMPTY....");
return; }
display();
printf("\n\n=====THE UNION OF LIST-1 and LIST-2 IS =====\n\n");
if(temphead1==NULL)
while(temphead2!=NULL)
{ printf("%4d,",temphead2->info2);
temphead2 = temphead2->nxt2; }
else if(temphead2==NULL)
while(temphead1!=NULL)
{ printf("%4d,",temphead1->info1);
temphead1 = temphead1->nxt1; }
else
{ while(temphead1!=NULL)
{ printf("%4d,",temphead1->info1);
temphead1 = temphead1->nxt1; }
while(temphead2!=NULL)
{ temphead1 = head1;flag=0;
while(temphead1!=NULL)
if(temphead1->info1==temphead2->info2)
{ flag=1; break; }
else temphead1=temphead1->nxt1;
if(flag==0)
printf("%4d,",temphead2->info2);
temphead2 = temphead2->nxt2;
}
}getch();
}
void list_intersection()
{
struct list1 *temphead1;
struct list2 *temphead2;
temphead1 = head1;
display();
printf("\n\n======INTERSECTION OF LIST-1 and LIST-2 IS========\n\n");
int intcount=0;
while(temphead1!=NULL)
{ temphead2 = head2;
while(temphead2!=NULL)
{ if(temphead1->info1 == temphead2->info2)
{ printf("%4d,",temphead1->info1);
intcount++; break; }
temphead2 = temphead2->nxt2;
}
temphead1 = temphead1->nxt1;
}
if(intcount==0) printf("\n\nNO ANY COMMON ELEMENTS ARE THERE IN LIST-1 and LIST-2..\n\n");
getch();
}
void list_sum()
{
struct list1 *temphead1;
struct list2 *temphead2;
int suml1=0,suml2=0;
temphead1 = head1;
temphead2 = head2;
display();
printf("\n\n========SUM OF THE TWO LIST========\n\n");
if(temphead1==NULL)
printf("List-1 is EMPTY.....\n");
else
{ while(temphead1!=NULL)
{ suml1+=temphead1->info1;
temphead1=temphead1->nxt1; }
printf("SUM OF THE ELEMENTS OF LIST-1 IS : %d",suml1);
}
if(temphead2==NULL)
printf("List-2 is EMPTY.....\n");
else
{ while(temphead2!=NULL)
{ suml2+=temphead2->info2;
temphead2=temphead2->nxt2; }
printf("\n\nSUM OF THE ELEMENTS OF LIST-2 IS : %d",suml2);
}
getch();
}
void list_count()
{
struct list1 *temphead1;
struct list2 *temphead2;
int countl1=0,countl2=0;
temphead1 = head1;
temphead2 = head2;
display();
printf("\n\n========COUNT OF THE TWO LIST========\n\n");
if(temphead1==NULL)
printf("List-1 is EMPTY.....\n");
else
{ while(temphead1!=NULL)
{ countl1++;
temphead1=temphead1->nxt1; }
printf("TOTAL NUMBER OF ELEMENTS IN LIST-1 IS : %d",countl1);
}
if(temphead2==NULL)
printf("List-2 is EMPTY.....\n");
else
{ while(temphead2!=NULL)
{ countl2++;
temphead2=temphead2->nxt2; }
printf("\n\nTOTAL NUMBER OF ELEMENTS IN LIST-2 IS : %d",countl2);
}
getch();
}
void list_rev()
{
struct list1 *temphead1=head1;
struct list1 *mid1,*tmid1;
struct list2 *temphead2=head2;
struct list2 *mid2,*tmid2;
int cnt1=0,cnt2=0;
int i,j,st1,st2;
while(temphead1!=NULL)
{ cnt1++;
temphead1=temphead1->nxt1; }
while(temphead2!=NULL)
{ cnt2++;
temphead2=temphead2->nxt2; }
temphead1 = head1; temphead2 = head2;
for(i=1;i<=(cnt1/2);i++)
temphead1 = temphead1->nxt1;
for(i=1;i<=(cnt2/2);i++)
temphead2 = temphead2->nxt2;
mid1 = temphead1;
mid2 = temphead2;
temphead1 = head1; temphead2 = head2;
if(cnt1>1&&cnt1%2==0)
{ int tcnt1 = cnt1;
for(i=1;i<=(cnt1/2);i++)
{ tmid1 = mid1;
for(j=((cnt1/2)+1);j<tcnt1;j++)
tmid1 = tmid1->nxt1;
tcnt1--;
st1 = temphead1->info1;
temphead1->info1 = tmid1->info1;
tmid1->info1 = st1;
temphead1 = temphead1->nxt1;
}
}
if(cnt2>1&&cnt2%2==0)
{ int tcnt2 = cnt2;
for(i=1;i<=(cnt2/2);i++)
{ tmid2 = mid2;
for(j=((cnt2/2)+1);j<tcnt2;j++)
tmid2 = tmid2->nxt2;
tcnt2--;
st2 = temphead2->info2;
temphead2->info2 = tmid2->info2;
tmid2->info2 = st2;
temphead2 = temphead2->nxt2;
}
}
getch();
}