Sitio WEB Recomendado

Estructura de Datos click here

prof lauro soto

<code>

  1. include <stdio.h>
  2. include <conio.h>
  3. include <stdlib.h>
  4. include<iostream.h>
  5. define MAX 10

struct lista {

   int numero;
   struct lista *sig;

}; typedef struct lista LISTATYPE; typedef LISTATYPE * LISTAPTR;

void Crea Lista? (LISTAPTR *); void A Ver La Lista? (LISTAPTR); void Free Lista? (LISTAPTR *); void MS (int, int, LISTAPTR *); void mezcla (int, int, int, int, LISTAPTR *);

void main () {

   LISTAPTR inicio= NULL;

   clrscr();
   //randomize();
   Crea Lista(&inicio);
   //printf(“\n\nNumeros Capturados para Ordenar:\n”);
   //A Ver La Lista(inicio);
   MS(0,MAX-1,&inicio);
   printf(“\n\nNumeros ordenados:\n”);
   A Ver La Lista(inicio);
   Free Lista(&inicio);
   getch();

}

void Crea Lista (LISTAPTR *inicio) {

   int i,n,A[MAX];
   LISTAPTR nuevo, temp;

   cout<<”\nMETODO DE MERGE SORT\n\n”;
   cout«”Cuantos Numeros Deseas Capturar : “;cin»n;

   for (i=0; i<n; i++)
      {
	cout«”Capturar “<<”[“<<i<<”] : “;cin»A[i];
	 nuevo= (LISTAPTR) malloc(sizeof(LISTATYPE));
	 nuevo→sig= NULL;
	 nuevo→numero= A[i];
	 //random(n*n);

	 if (*inicio == NULL)
	    *inicio= nuevo;
	 else
	    {
	       temp= *inicio;
	       while (temp→sig != NULL)
		  temp= temp→sig;
	       temp→sig= nuevo;
	    }
      }

}

void A Ver La Lista (LISTAPTR inicio) {

   if (inicio != NULL)
      {

	 printf(“\n %d “,inicio→numero);
	 A Ver La Lista(inicio→sig);
      }

}

void Free Lista (LISTAPTR *inicio) {

   LISTAPTR temp= *inicio;

   if (*inicio != NULL)
      {
	 Free Lista(&((*inicio)→sig));
	 free(temp);
      }

}

void MS (int ini, int fin, LISTAPTR *inicio) {

   int m, m1;

   if (ini < fin)
      {
	 m= (ini+fin)/2;
	 m1= m+1;
	 MS(ini,m,&(*inicio));
	 MS(m1,fin,&(*inicio));
	 mezcla(ini,m,m1,fin,&(*inicio));
      }

}

void mezcla (int ini, int m, int m1, int fin, LISTAPTR *inicio) {

   LISTAPTR ci, cj;
   int i, j, k= 0, kC[MAX];

   ci= cj= *inicio;
   for (i=k; i<ini; i++,ci=ci→sig);
   for (j=k; j<m1; j++ ,cj=cj→sig);
   kC[k]= k;

   while (i‹=m || j<=fin)
      {
	 if (i > m)
	    {
	       kC[k]= cj→numero;
	       j++;
	       cj= cj→sig;
	    }
	 else
	    if (j > fin)
	       {
		  kC[k]= ci→numero;
		  i++;
		  ci= ci→sig;
	       }
	    else
	       if (ci→numero < cj→numero)
		  {
		     kC[k]= ci→numero;
		     i++;
		     ci= ci→sig;
		  }
	       else
		  {
		     kC[k]= cj→numero;
		     j++;
		     cj= cj→sig;
		  }
	 k++;
      }

   for (ci=*inicio,i=k-k; i<ini; i++,ci=ci→sig);
   for (k=0; i<=fin; i++, k++,ci=ci→sig)
      ci→numero= kC[k];

}

</code>


Google