void* hash_borrar(hash_t* hash, const char* clave) {
    if (!hash_pertenece(hash,clave)) return NULL;
    size_t posicion = fhash(clave,hash->tamanio);
    lista_iter_t* iter = lista_iter_crear(hash->tabla[posicion]);
    nodo_hash_t* nodo = lista_iter_ver_actual(iter);
    bool esta = false;
    while (!lista_iter_al_final(iter)) {
        if (strcmp(nodo->clave,clave) == 0) {
 	    esta = true;
	    break;
        }
        lista_iter_avanzar(iter);
        nodo = lista_iter_ver_actual(iter);
    }

    if (esta == false) {
	lista_iter_destruir(iter);
	return NULL;
    }
    nodo = (nodo_hash_t*)lista_borrar(hash->tabla[posicion],iter);
    void* dato = nodo->dato;
    free(nodo->clave);
    free(nodo);
    lista_iter_destruir(iter);
    hash->cantidad --;
    return dato;
}
int agregar_juguete(base_t* base,char* idfabrica,char* idjuguete,char* valor,char* peso){
    if (!hash_pertenece(base->fabricas,idfabrica)) return -1; //verifico si la fabrica existe
    //creo el juguete
    juguete_t* juguete = crear_juguete(idjuguete,valor,peso);
    if (juguete==NULL) return -2; //no se pudo crear el juguete
    fabrica_t* fabrica = hash_obtener(base->fabricas,idfabrica);
    if (lista_insertar_ultimo(fabrica->juguetes,(void*)juguete)!=true) return -3; //agrego el juguete y verifico si se pudo
    return 0;
}
示例#3
0
文件: uniq.c 项目: t0mixcs/TP-2
void filtrar_e_imprimir_lineas(FILE *archivo, hash_t *hash){
	ssize_t linea_tam;
	size_t char_tam = 0;
	while(linea_tam != -1){
		char *linea = NULL;
		linea_tam = getline(&linea, &char_tam, archivo);
		if(hash_pertenece(hash, linea)){
			free(linea);
		}else{
			hash_guardar(hash, linea, linea);
			puts(linea);
		}
	}
}
示例#4
0
文件: join.c 项目: nee47/T-P-2
int main(int argc, char** argv){
  
  if(argc != 3){
    printf("Uso: ./join <Archivo1> <Archivo2>\n");
    exit(1);
  }
  
  FILE* archivo1 = fopen(argv[1], "r");
  FILE* archivo2 = fopen(argv[2], "r");
  if(!archivo1 || !archivo2) {
    if(archivo1) fclose(archivo1);
    if(archivo2) fclose(archivo2);
    printf("Error al abrir un archivo o no existe\n");
    exit(1);
  }
  hash_t* hash = hash_crear(free);
  if(!hash){
    liberar(hash, archivo1, archivo2);
    exit(1);
  }
  ssize_t len1 = 0, len2=0;
  size_t capacidad = 0;
  char* linea1 = NULL;
  char* linea2 = NULL;
  while((len2 = getline(&linea2, &capacidad, archivo2 ) > 0)){
    char* campo_1 = obtener_campo1(linea2);
    if(!hash_guardar(hash, campo_1, linea2)){
      liberar(hash, archivo1, archivo2);
      exit(1);
    }
    free(campo_1);
    linea2 = NULL;
  }
  
  while((len1 = getline(&linea1, &capacidad, archivo1 ) > 0)){
    char cadena[MAX_LEN];
    char* campo_1 = obtener_campo1(linea1);
    if(hash_pertenece(hash, campo_1)){
      char* aux = cadena;
      acoplar(&aux, linea1, (char*)hash_obtener(hash, campo_1));
      printf("%s", cadena);
    }
    free(campo_1);
  }
  liberar(hash, archivo1, archivo2);
  free(linea1);
  free(linea2);
  return 0;
}
int valuar_juguetes(base_t* base,char* idfabrica){
    if (!hash_pertenece(base->fabricas,idfabrica)) return -1;
    int sonrisas = 0;
    int i;
    //creo la mochila y la inicializo
    int* mochila = calloc(base->capacidad+1,sizeof(int));
    fabrica_t* fabrica = hash_obtener(base->fabricas,idfabrica);
    //creo el iterador para recorrer los juguetes que tiene la fabrica
    lista_iter_t* iterador = lista_iter_crear(fabrica->juguetes);
    juguete_t* juguete = lista_iter_ver_actual(iterador);
    while(juguete!=NULL){
        for(i=base->capacidad;i>0;i--){
            if (i-(juguete->peso)>=0){
                if (mochila[i]<(mochila[i-juguete->peso]+juguete->valor)) mochila[i]=(mochila[i-juguete->peso]+juguete->valor);
            }
        }
        lista_iter_avanzar(iterador);
        juguete = lista_iter_ver_actual(iterador);
    }
    sonrisas = mochila[base->capacidad];
    lista_iter_destruir(iterador);
    free(mochila);
    return sonrisas;
}
示例#6
0
bool paciente_valido(const hash_t* t_pacientes, const char *nombre_paciente)
{
	return hash_pertenece(t_pacientes, nombre_paciente);
}