Esempio banale:
codice:#include <stdio.h> #include <stdlib.h> int compare_int(const void * a, const void * b){ return (*(int*)a) - (*(int*)b); } int main (int argc, char **argv) { /*Dichiarazioni*/ struct _record { int id; char nome[30]; } record [] = { {1, "pippo"} ,{5, "topolino"} ,{2, "pluto"} ,{0, "minnie"} }; /*array di record di esempio da trovare*/ size_t elem_size = sizeof(struct _record); /* dimensione di un record */ size_t elem_count = sizeof(record) / elem_size; /* quanti record nell'array */ int * indice; /* indice */ int i; /* contatore */ int find; /* elemento da trovare */ int *trovato; /* elemento trovato */ /* Implementazione */ indice = (int*)malloc(sizeof(int)*elem_count); /*1) Allocazione memoria */ if(indice==NULL) return 1; for(i=0;i<elem_count;++i) /*2) riempimento indice */ indice[i] = record[i].id; qsort(indice, elem_count, sizeof(int), compare_int); /*3) Ordinamento indice*/ find = 2; /*4) cerco il record con id = 2 */ trovato = (int*)bsearch(&find, indice, elem_count, sizeof(int), compare_int); if(trovato != NULL) /*5) stampa risultato */ printf("Record trovato:nID: %d nNome: %sn", record[*trovato].id, record[*trovato].nome); else printf("Non trovaton"); free(indice); /*6) liberazione memoria allocata */ }

Rispondi quotando
