Inver. hfile [cpp] # ifndef INVERT_FILE_H # define INVERT_FILE_H # include <stdio. h> # include <stdlib. h> typedef struct _ invertfile _ {unsigned int tablelen; void ** table; // unsigned int offset; unsigned int nodecount;} if_t; typedef struct _ word _ {unsigned int id; unsigned int refered; // void * link;} word_t; typedef struct _ word_frequency _ {unsigned int d_id; unsigned int refered; // the num of referenced I N the document void * next;} wf_t; if_t * invertfile_create (int length); void invertfile_insert (if_t * h, int w_id, int d_id); wf_t * invertfile_search (if_t * h, int w_id, int d_id); void invertfile_traverse (if_t * h); void invertfile_free (if_t * h); # endif invert. cpp [cpp] # include "invert. h "if_t * invertfile_create (int length) {if_t * h; h = (if_t *) calloc (1, sizeof (if_t); if (NULL = h) return NULL; h-> table = (Void **) calloc (length, sizeof (void *); h-> tablelen = length; h-> nodecount = 0; word_t * w; for (int I = 0; I <length; I ++) {h-> table [I] = malloc (sizeof (word_t); w = (word_t *) h-> table [I]; w-> id = I; w-> refered = 0; w-> link = NULL;} return h ;} // check if document d_id have word w_id wf_t * invertfile_search (if_t * h, int w_id, int d_id) {word_t * w; wf_t * wf; w = (word_t *) h-> table [w_id]; if (w-> refered> 0) {wf = (wf_t *) w-> li Nk; while (wf) {if (wf-> d_id = d_id) return wf; wf = (wf_t *) wf-> next ;}} return NULL ;} void invertfile_insert (if_t * h, int w_id, int d_id) {word_t * w = (word_t *) h-> table [w_id]; wf_t * wf; if (wf = invertfile_search (h, w_id, d_id ))! = NULL) {wf-> refered ++;} else {wf = (wf_t *) malloc (sizeof (wf_t); wf-> next = w-> link; w-> link = wf; w-> refered ++; wf-> d_id = d_id; h-> nodecount ++ ;}} void invertfile_free (if_t * h) {word_t * w; wf_t * wf, * cur; for (int I = 0; I