数据结构之串—关键词索引表

本文深入探讨了数据结构中的关键词索引表,揭示了如何有效地存储和检索字符串数据,对于理解和优化字符串搜索算法具有重要意义。
摘要由CSDN通过智能技术生成

关键词索引


1、从列有书号和书名的文件中将书号和书名提取出来
2、提取书名中的关键词
3、将关键词插入索引表,将具有相同关键词的书的书号和关键词放在一起

比如有这样4本书:

 006 Harry Potter and the Sorcerer's Stone
 007 Harry Potter and the Chamber of Secrets
 008 Harry Potter and the Prisoner of Azkab
 009 Harry Potter Harry and the Goblet of Fire



将其做成关键词索引表:
 azkab 008
 chamber 007
 fire 009
 goblet 009
 harry 006 007 008 009
 potter 006 007 008 009

  只按相对位置摘取了一部分关键词,实际上需要将所有关键词提取并按字母排列顺序做成索引表

  书上的索引表是用顺序存储结构建立并使用的,但是在这里我用链式结构建立索引表再将链式表转化为顺序存储
这样在建立索引表插入关键词的时候比较方便,而且节省了因关键词数量的不确定而多分配的内存。

下面列出一些细节,完整的工程请到最后的链接下载


  建立关键词表,单纯的提取英文单词,只需判断空白字符的位置
可以直接使用strstr()去找空格的位置,但由于英文单词的空白字符不能确定,为了安全还是一个一个检查空白字符
利用FLAG和*lprear可以判断是否遇到了新的单词的开头和结尾

#define KEYSIZE 25
#define KEYNUMBER 15

typedef struct {
	char szKey[KEYNUMBER][KEYSIZE];
	int nKeyCount;
}KEYLIST;

BOOL SetKeyList(KEYLIST * lpKeyList, char * lpBookName)
{
	int i, FLAG;
	int nkeysize;
	char * lpfront;
	char * lprear;

	i = 0;
	FLAG = 1;
	lpfront = lprear = lpBookName;

	while (*lprear)
	{
		if (isspace(*lprear) && FLAG)  //遇到了单词的结尾
		{
			nkeysize = lprear - lpfront;
			memcpy_s(lpKeyList->szKey[i], KEYSIZE, lpfront, nkeysize);
			lpKeyList->szKey[i][nkeysize] = '\0';
			if (!IsFrequentWord(lpKeyList->szKey[i]))
				i++;
			FLAG = 0;
		}
		if (!(isspace(*lprear) || FLAG)
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值