Universidad Carlos III de Madrid

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2012 - Enero 2013

8. Preguntas de autoevaluación

Comprueba con estas preguntas si has entendido este documento.

  1. Este es el código incompleto de definición de la estructura de datos de una tabla hash con colisiones gestionadas a través de estructuras enlazadas.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct datos {
     char *name;
     int nia; 
    };
    struct elemento_t {
     struct datos valor;
     struct elemento_t *next;
    };
    struct tabla_type {
     int tamanho;
     int num_elementos;
     double densidad_deseada;
     ???????????????????????
    };

    Indique cuál es el trozo de código que falta

    • struct elemento_t *tabla;

    • struct elemento_t **tabla;

    • struct elemento_t tabla;

  2. Este es el código incompleto de inicialización de la tabla hash del ejercicio anterior.

    1
    2
    3
    4
    5
    6
    7
    tabla_type tabla;
    int i;
    tabla.tamanho=20;
    tabla.num_elementos=0;
    tabla.densidad_deseada=0.25;
    tabla.tabla = (elemento_type **) malloc (sizeof(elemento_type *)*tabla.tamanho);
    ?????????????????

    Indique cuál es el trozo de código que falta

    • for (i=0;i<tabla.tamanho;i++)
      {
       tabla.tabla[i]=NULL;
      }

    • for (i=0;i<tabla.tamanho;i++)
      {
       tabla.tabla=NULL;
      }

    • El código está completo.

  3. Este es el código incompleto de la función hash y de las funciones necesarias para insertar un nuevo elemento.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    int hash(int clave,tabla_type *tabla)
    {
    /*fmod returns the module of the division*/
    return (int ) fmod((float)clave,(float)tabla->tamanho); 
    }
    
    elemento_type *new_element(int clave, datos valor, elemento_type *next){
     elemento_type *new_el = (elemento_type *)malloc(sizeof (elemento_type));
     new_el->datos=valor;
     new_el->clave=clave;
     new_el->next=next;
     return new_el;
    }
    
    void insert_element(int clave, datos valor, tabla_type *tabla){
     int index;
     index = hash(clave,tabla);
    ?????????????????????????????????
    }

    Indique cuál es el trozo de código que falta

    • new_element(clave,valor,tabla);

    • tabla=new_element(clave,valor,tabla[index]);

    • tabla[index]=new_element(clave,valor,tabla[index]);