C语言字符串倒排,C语言兑现简单的倒排文件索引
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语言兑现简单的倒排文件索引相关推荐
- c语言怎么取字符串首字母,C语言 字符串首字母转换成大写简单实例
C语言 字符串首字母转换成大写简单实例 C语言 字符串首字母转换成大写简单实例 举例: 输入:this is a book 返回:This Is A Book #include #include #i ...
- c语言字符串怎么退位,C语言第五六次作业.ppt
C语言作业解析 第四弹 原来真正变态的是这两作业哇 原本是做完第五次作业等大家数分期中考完以后给大家 结果直接出了第六次 就顺便做了 买一送一还包邮哦亲 虽然这两次作业比较难 理解起来困难无比 不过考 ...
- c语言字符串文库总结,C语言字符串.ppt
C语言字符串.ppt ACM程序设计,福州大学至诚学院 冯新,第四讲,字符串处理,常用函数介绍,复制,char* strcpy char *s1, const char *s2; 将字符串s2复制到s ...
- c语言 字符串切片重组,C语言实现分割字符串
背景 遇到一个将字符串分割场景.以前从没有用c语言实现,都是使用python的split()函数,python处理起来很简单. split()方法语法: str.split(str="&qu ...
- c语言 字符串切片重组,c语言 字符串的拼接和分割实例
1.字符串的拼接 使用c的函数char *strcat(char *str_des, char *str_sou); 将字符串str_sou接在字符串str_des后面(放在str_des的最后字符和 ...
- c语言字符串型函数是,C语言字符/字符串相关函数收藏大全
字符处理函数 int tolower(char ch)若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z') int toupper(char ch)若ch是小写字母('a'-'z') ...
- c语言字符串升序输出,编写程序将已按升序排好的两个字符串a和b中的字符按升序归并到字符串c中,最后输出”abcdefghijklmnpq”。...
满意答案 sjoest 2014.08.18 采纳率:59% 等级:8 已帮助:663人 (1)char a[]="acegikm"; a数组没有赋予数组大小,所 ...
- c语言字符串子串问题,C语言计算字符串子串出现的次数
#include #include int substring(char *str,char *str1);//函数原型 int main(void) { char str[64]={0}; char ...
- c语言字符串加减_C语言中指针的介绍
C语言中指针的介绍 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编 ...
最新文章
- CentOS7关闭防火墙方法
- C语言playsoundw函数,使用inline hook实现修改PC微信通知铃声-哥哥微信来了
- what's new in vs 2005
- mysql active_GitHub - vipshop/drc: MySQL active-active replication solution.
- python安装you—get_使用Python下载工具you-get下载媒体文件
- 爬虫运行成功但没数据_我整来了几台服务器,就是为了给你演示一下分布式爬虫的整个过程...
- php composer 无法下载,composer给laravel下载扩展包 无法下载的问题
- 姚爱红计算机组成原理知识要点,计算机组成原理课程混合教学模式探究
- 华为防火墙笔记-安全策略
- image “pyimage2“ doesn‘t exist
- NB-IoT通信模组/模块
- 微信小程序常用知识点总结
- winmail.dat
- [教程] 使用3D Infinite Runner Toolkit打造僵尸跑酷游戏
- 大疆无人机安卓Mobile Sdk开发(三)制定航点任务WaypointMission
- SCAU操作系统考前抱佛腿笔记(自家用)
- IOS 苹果手机fiddler抓包时出现了tunnel to 443 解决方案,亲测有效
- 打包Android编译出错make: *** No rule to make target 解决办法
- 动森服务器维护时间,动物之森自动存档多久一次 动森自动存档时间机制介绍...
- 基于MySQL的嵌入式Linux自动抄表系统设计与实现(附源码)
热门文章
- flink实时流遇到的问题排查——部分数据未落库redis问题
- 操作系统学习总结(超赞!!!)
- 两台服务器之间mysql数据库怎么做同步_mysql数据库占满磁盘导致服务器无法运行...
- 安卓导航无信号无服务器,无信号导航能用否
- 个性签名设计软件_佩服!我用Python设计了一个签名软件
- oracle 31693,ORACLE expdp备份与ORA-31693、ORA-02354、ORA-01555
- 雨林木风win11 64位全新专业版系统v2021.08
- 腾讯视频如何移出其他观看腾讯视频的设备
- 各纬度气候分布图_地理:世界各种气候类型分布图(高清版)汇总!以及解答分析哦~...
- python自动化_Python 实现Excel自动化办公上