]> git.llucax.com Git - z.facultad/75.06/jacu.git/blobdiff - otros/mtf/mtf.c
detalle
[z.facultad/75.06/jacu.git] / otros / mtf / mtf.c
index e8b9f058aa5fe7ee6c78b39ed69574652771f93a..efd2b72f7af0ed46586e42b1f9ce832229f58700 100644 (file)
@@ -1,7 +1,7 @@
 #include "mtf.h"
 
 /****privadas*****/
 #include "mtf.h"
 
 /****privadas*****/
-int no_pertenece(char *z, char c);
+int no_pertenece(char *z, char c, int len);
 
 void pop_front(char *z, int pos);
 
 
 void pop_front(char *z, int pos);
 
@@ -16,6 +16,15 @@ void print_z(char *z, int len)
        printf("\n");
 }
 
        printf("\n");
 }
 
+int comparar(const void *d1, const void *d2)
+{
+       char *c1, *c2;
+
+       c1 = (char *)d1;
+       c2 = (char *)d2;
+
+       return (*c1) - (*c2);
+}
 
 int *jacu_mtf(char *datos, int len)
 {
 
 int *jacu_mtf(char *datos, int len)
 {
@@ -23,12 +32,17 @@ int *jacu_mtf(char *datos, int len)
        int *pos;
        int i, size;
        
        int *pos;
        int i, size;
        
-       pos = (int*)malloc(len);
+       pos = (int*)malloc(len*sizeof(int));
        z = jacu_buscar_z(datos, len, &size);
        printf("Z original = ");
        print_z(z, size);
        printf("SIZE = %d\n", size);
        z = jacu_buscar_z(datos, len, &size);
        printf("Z original = ");
        print_z(z, size);
        printf("SIZE = %d\n", size);
-       z[0]='A';z[1]='B';z[2]='C';z[3]='D';z[4]='R';
+       /*z[0]='A';z[1]='B';z[2]='C';z[3]='D';z[4]='R';*/
+       /* Ordeno */
+       qsort(z, size, 1, comparar);
+       printf("Z ordenado = ");
+       print_z(z, size);
+
        for(i=0; i<len; i++){
                pos[i] = get_pos(z, size, datos[i]);
                printf("vino %c emiti: %d\n",datos[i], pos[i]);
        for(i=0; i<len; i++){
                pos[i] = get_pos(z, size, datos[i]);
                printf("vino %c emiti: %d\n",datos[i], pos[i]);
@@ -45,13 +59,13 @@ char *jacu_buscar_z(char* datos, int len, int *size)
        char *z;
        int i, j=0;
        
        char *z;
        int i, j=0;
        
-       z = (char*)malloc(1);
-       if (z==NULL) return NULL;
+       z = NULL; /*(char*)malloc(1);*/
+       /*if (z==NULL) return NULL;*/
        for(i=0; i<len; i++){
        for(i=0; i<len; i++){
-               if( no_pertenece(z, datos[i]) ){
-                       realloc(z, j*sizeof(char));
-                       z[j]=datos[i];
+               if( no_pertenece(z, datos[i], j) == -1 ){
                        j++;
                        j++;
+                       z = realloc(z, j*sizeof(char));
+                       z[j-1]=datos[i];
                        *size = j;
                }
        }
                        *size = j;
                }
        }
@@ -59,12 +73,13 @@ char *jacu_buscar_z(char* datos, int len, int *size)
 }
        
 
 }
        
 
-int no_pertenece(char *z, char c)
+int no_pertenece(char *z, char c, int len)
 {
        int i;
        
 {
        int i;
        
-       for(i=0; i<255; i++)
-               if ( z[i] == c )
+       /* XXX Z NO TIENE 255 POSICIONES XXX */
+       for(i=0; i<len; i++)
+               if (z[i] == c)
                        return 0;
        return -1;
 }
                        return 0;
        return -1;
 }
@@ -83,6 +98,8 @@ void pop_front(char *z, int pos)
 int get_pos(char *z, int len, char c)
 {
        int pos;
 int get_pos(char *z, int len, char c)
 {
        int pos;
+       if (z==NULL) return -1;
+
        for(pos=0; pos<len; pos++)
                if ( z[pos] == c )
                        return pos;
        for(pos=0; pos<len; pos++)
                if ( z[pos] == c )
                        return pos;