vineri, 14 septembrie 2018

Alocare dinamica - sortare liste

# 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,p,q;

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);

getche();
}

Niciun comentariu:

Trimiteți un comentariu