C语言实现简单的倒排文件索引

inver.h文件

#ifndef INVERT_FILE_H

#define INVERT_FILE_H

#include

#include

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 in 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

#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

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->link;

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->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;itablelen;i++){

w=(word_t*)h->table[i];

wf=(wf_t*)w->link;

while(wf!=NULL){

cur=wf;

wf=(wf_t*)wf->next;

free(cur);

}

free(w);

}

free(h->table);

}

void invertfile_traverse(if_t *h){

word_t *w;

wf_t* wf,*cur;

for(int i=0;itablelen;i++){

w=(word_t*)h->table[i];

wf=(wf_t*)w->link;

printf("word_id:%d;",w->id);

while(wf!=NULL){

cur=wf;

wf=(wf_t*)wf->next;

printf("d_id:%d,freq:%d;",cur->d_id,cur->refered);

}

printf("\n");

}

}测试文件main.cpp

#include"invert.h"

int main(){

if_t *f=invertfile_create(10);

invertfile_insert(f,1,1);

invertfile_insert(f,1,1);

invertfile_insert(f,1,3);

invertfile_insert(f,2,5);

invertfile_traverse(f);

invertfile_free(f);

}实验结果:

word_id:0;

word_id:1;d_id:3,freq:1;d_id:1,freq:2;

word_id:2;d_id:5,freq:1;

word_id:3;

word_id:4;

word_id:5;

word_id:6;

word_id:7;

word_id:8;

word_id:9;

C语言字符串倒排,C语言兑现简单的倒排文件索引相关推荐

  1. c语言怎么取字符串首字母,C语言 字符串首字母转换成大写简单实例

    C语言 字符串首字母转换成大写简单实例 C语言 字符串首字母转换成大写简单实例 举例: 输入:this is a book 返回:This Is A Book #include #include #i ...

  2. c语言字符串怎么退位,C语言第五六次作业.ppt

    C语言作业解析 第四弹 原来真正变态的是这两作业哇 原本是做完第五次作业等大家数分期中考完以后给大家 结果直接出了第六次 就顺便做了 买一送一还包邮哦亲 虽然这两次作业比较难 理解起来困难无比 不过考 ...

  3. c语言字符串文库总结,C语言字符串.ppt

    C语言字符串.ppt ACM程序设计,福州大学至诚学院 冯新,第四讲,字符串处理,常用函数介绍,复制,char* strcpy char *s1, const char *s2; 将字符串s2复制到s ...

  4. c语言 字符串切片重组,C语言实现分割字符串

    背景 遇到一个将字符串分割场景.以前从没有用c语言实现,都是使用python的split()函数,python处理起来很简单. split()方法语法: str.split(str="&qu ...

  5. c语言 字符串切片重组,c语言 字符串的拼接和分割实例

    1.字符串的拼接 使用c的函数char *strcat(char *str_des, char *str_sou); 将字符串str_sou接在字符串str_des后面(放在str_des的最后字符和 ...

  6. c语言字符串型函数是,C语言字符/字符串相关函数收藏大全

    字符处理函数 int tolower(char ch)若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z') int toupper(char ch)若ch是小写字母('a'-'z') ...

  7. c语言字符串升序输出,编写程序将已按升序排好的两个字符串a和b中的字符按升序归并到字符串c中,最后输出”abcdefghijklmnpq”。...

    满意答案 sjoest 2014.08.18 采纳率:59%    等级:8 已帮助:663人 (1)char a[]="acegikm";       a数组没有赋予数组大小,所 ...

  8. c语言字符串子串问题,C语言计算字符串子串出现的次数

    #include #include int substring(char *str,char *str1);//函数原型 int main(void) { char str[64]={0}; char ...

  9. c语言字符串加减_C语言中指针的介绍

    C语言中指针的介绍 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编 ...

最新文章

  1. CentOS7关闭防火墙方法
  2. C语言playsoundw函数,使用inline hook实现修改PC微信通知铃声-哥哥微信来了
  3. what's new in vs 2005
  4. mysql active_GitHub - vipshop/drc: MySQL active-active replication solution.
  5. python安装you—get_使用Python下载工具you-get下载媒体文件
  6. 爬虫运行成功但没数据_我整来了几台服务器,就是为了给你演示一下分布式爬虫的整个过程...
  7. php composer 无法下载,composer给laravel下载扩展包 无法下载的问题
  8. 姚爱红计算机组成原理知识要点,计算机组成原理课程混合教学模式探究
  9. 华为防火墙笔记-安全策略
  10. image “pyimage2“ doesn‘t exist
  11. NB-IoT通信模组/模块
  12. 微信小程序常用知识点总结
  13. winmail.dat
  14. [教程] 使用3D Infinite Runner Toolkit打造僵尸跑酷游戏
  15. 大疆无人机安卓Mobile Sdk开发(三)制定航点任务WaypointMission
  16. SCAU操作系统考前抱佛腿笔记(自家用)
  17. IOS 苹果手机fiddler抓包时出现了tunnel to 443 解决方案,亲测有效
  18. 打包Android编译出错make: *** No rule to make target 解决办法
  19. 动森服务器维护时间,动物之森自动存档多久一次 动森自动存档时间机制介绍...
  20. 基于MySQL的嵌入式Linux自动抄表系统设计与实现(附源码)

热门文章

  1. flink实时流遇到的问题排查——部分数据未落库redis问题
  2. 操作系统学习总结(超赞!!!)
  3. 两台服务器之间mysql数据库怎么做同步_mysql数据库占满磁盘导致服务器无法运行...
  4. 安卓导航无信号无服务器,无信号导航能用否
  5. 个性签名设计软件_佩服!我用Python设计了一个签名软件
  6. oracle 31693,ORACLE expdp备份与ORA-31693、ORA-02354、ORA-01555
  7. 雨林木风win11 64位全新专业版系统v2021.08
  8. 腾讯视频如何移出其他观看腾讯视频的设备
  9. 各纬度气候分布图_地理:世界各种气候类型分布图(高清版)汇总!以及解答分析哦~...
  10. python自动化_Python 实现Excel自动化办公上