# include <stdio.h>;
# include <alloc.h>;
# include <conio.h>;
# include <values.h>;
# include <math.h>;
struct nod{int util; struct nod * next;};
typedef struct nod NOD;
typedef NOD * NOD_PTR;
int n,m,i,val;
NOD_PTR first1,first2,first3,p,q,r,s,aux;
NOD * sl_ins(int n)
{
NOD * first;
//Creare primul nod
i=1;
printf("a[%d]=",i);
scanf("%d",&val);
first=NULL;
first=(NOD_PTR)malloc(sizeof(NOD));
first->util=val;
first->next=NULL;
//Inserarea celorlalte numere
for(i=2;i<=n;i++)
{
//Citire valoare
printf("a[%d]=",i);
scanf("%d",&val);
//Determinare pozitie si legarea in lista
p=first;
while((p->next!=NULL)&&(p->next->util<val))
{
p=p->next;
}
//Cream un nou nod(var dinamica), dupa ce i-am determinat pozitia (p->next)
q=(NOD_PTR) malloc(sizeof(NOD));
q->util=val;
q->next=NULL;
if(val<p->util)
{
q->next=p;
first=q;
}
else
{
q->next=p->next;
p->next=q;
}
}
//Creare santinele
r=NULL;
r=(NOD *)malloc(sizeof(NOD));
r->next=NULL;
r->util= - MAXINT;
//Legare la primul nod
r->next=first;
first=r;
r=NULL;
r=(NOD *)malloc(sizeof(NOD));
r->next=NULL;
r->util= + MAXINT;
//Legare dupa ultimul nod
// (**)
// !!! Parcurg lista (q nu e ultimul daca s-a inserat primul si p=?)
p=first;
while(p->next!=NULL)
{
p=p->next;
}
//Acum p==ultimul nod
// (**)
p->next=r;
return first;
}
void afis(NOD * first)
{
//Afisam lista sortata prin inserare
printf("\nAfisam lista:\n");
p=first;
while(p!=NULL)
{
if(abs(p->util)!=MAXINT)
printf("%d ",p->util);
p=p->next;
}
}
void main(void)
{
clrscr();
printf("Intr nr de elemente din prima lista: ");
scanf("%d",&n);
printf("Intr nr de elemente din a doua lista: ");
scanf("%d",&m);
first1=sl_ins(n);
first2=sl_ins(m);
afis(first1);
printf("\n");
afis(first2);
//Interclasare
p=first1;
q=first2;
first3=NULL;
first3=(NOD *)malloc(sizeof(NOD));
first3->next=NULL;
if(p->util<q->util)
{
first3->util=p->util;
p=p->next;
}
else
{
first3->util=q->util;
q=q->next;
}
aux=first3;
while((p!=NULL)&&(q!=NULL))
{
r=NULL;
r=(NOD *)malloc(sizeof(NOD));
r->next=NULL;
if(p->util<q->util)
{
r->util=p->util;
p=p->next;
}
else
{
r->util=q->util;
q=q->next;
}
aux->next=r;
aux=r;
}
//Copiere
if(p==NULL)
aux=q;
else aux=p;
s=r;
r=NULL;
r=(NOD *)malloc(sizeof(NOD));
r->next=NULL;
r->util=aux->util;
aux=aux->next;
s->next=r;
s=r;
while(aux!=NULL)
{
r=NULL;
r=(NOD *)malloc(sizeof(NOD));
r->next=NULL;
r->util=aux->util;
aux=aux->next;
s->next=r;
s=r;
}
//Afisare sir interclasat
printf("\nAfisez sirl interclasat:\n");
afis(first3);
getche();
}
# include <stdio.h>;
# include <alloc.h>;
# include <conio.h>;
struct nod{int util; struct nod * next;};
typedef struct nod NOD;
typedef NOD * NOD_PTR;
int n,m,i,val;
NOD_PTR first1,first2,first3,p,q,r,s,aux;
NOD * sl_ins(int n)
{
NOD * first;
//Creare primul nod
i=1;
printf("a[%d]=",i);
scanf("%d",&val);
first=NULL;
first=(NOD_PTR)malloc(sizeof(NOD));
first->util=val;
first->next=NULL;
//Inserarea celorlalte numere
for(i=2;i<=n;i++)
{
//Citire valoare
printf("a[%d]=",i);
scanf("%d",&val);
//Determinare pozitie si legarea in lista
p=first;
while((p->next!=NULL)&&(p->next->util<val))
{
p=p->next;
}
//Cream un nou nod(var dinamica), dupa ce i-am determinat pozitia (p->next)
q=(NOD_PTR) malloc(sizeof(NOD));
q->util=val;
q->next=NULL;
if(val<p->util)
{
q->next=p;
first=q;
}
else
{
q->next=p->next;
p->next=q;
}
}
return first;
}
void afis(NOD * first)
{
//Afisam lista sortata prin inserare
printf("\nAfisam lista:\n");
p=first;
while(p!=NULL)
{
printf("%d ",p->util);
p=p->next;
}
}
void main(void)
{
clrscr();
printf("Intr nr de elemente din prima lista: ");
scanf("%d",&n);
printf("Intr nr de elemente din a doua lista: ");
scanf("%d",&m);
first1=sl_ins(n);
first2=sl_ins(m);
afis(first1);
printf("\n");
afis(first2);
//Interclasare
p=first1;
q=first2;
first3=NULL;
first3=(NOD *)malloc(sizeof(NOD));
first3->next=NULL;
if(p->util<q->util)
{
first3->util=p->util;
p=p->next;
}
else
{
first3->util=q->util;
q=q->next;
}
aux=first3;
while((p!=NULL)&&(q!=NULL))
{
r=NULL;
r=(NOD *)malloc(sizeof(NOD));
r->next=NULL;
if(p->util<q->util)
{
r->util=p->util;
p=p->next;
}
else
{
r->util=q->util;
q=q->next;
}
aux->next=r;
aux=r;
}
//Copiere
if(p==NULL)
aux=q;
else aux=p;
s=r;
r=NULL;
r=(NOD *)malloc(sizeof(NOD));
r->next=NULL;
r->util=aux->util;
aux=aux->next;
s->next=r;
s=r;
while(aux!=NULL)
{
r=NULL;
r=(NOD *)malloc(sizeof(NOD));
r->next=NULL;
r->util=aux->util;
aux=aux->next;
s->next=r;
s=r;
}
//Afisare sir interclasat
printf("\nAfisez sirl interclasat:\n");
afis(first3);
getche();
}