資源描述:
《26、數(shù)據(jù)結(jié)構(gòu)筆記之二十六串應用之建立詞索引表》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、26、蛤蟆的數(shù)據(jù)結(jié)構(gòu)筆記之二十六串應用之建立詞索引表本篇名言:“生命是一條美麗而曲折的幽徑,路旁有妍花的麗蝶,累累的美果,但我們很少去停留觀賞,或咀嚼它,只一心一意地渴望趕到我們幻想中更加美麗的豁然開朗的大道。然而在前進的程途中,卻逐漸樹影凄涼,花蝶匿跡,果實無存,最后終于發(fā)覺到達一個荒
漠。--薩拉”1.信息檢索信息檢索是計算機應用的重要領域之一。為了提高圖書館數(shù)目檢索的效率,建立書名關鍵詞索引,可以實現(xiàn)讀者快速檢索書目的自動化,即讀者根據(jù)關鍵詞索引表,讀者可以方便查詢到自己感興趣的書目。準備一個文件BookInf
2、o.txt文件如下。注意最后一行不要后空行,不然程序會出錯。2.BookInfo.txt005ComputerDataStructure010IntroductiontoDataStructure023FundamentalofDataStructure034TheDesignandAnalysisofComputerAlgorithms050IntroductiontoNumericalAnalysis067NumericalAnalysis3.BookIdx.txt最后代碼運行完畢會生成如下的文本:關鍵字書號al
3、gorithms034,analysis034,050,067,computer005,034,data005,010,023,design034,fundamental023,introduction010,050,numerical050,067,structure005,010,023,1.代碼具體實現(xiàn)1.1定義定義如下#defineMaxBookNum1000//假設只對1000本書建索引表#defineMaxKeyNum2500//索引表的最大容量#defineMaxLineLen500//書目串的最大長度
4、#defineMaxWordNum10//詞表的最大容量typedefstruct{char*item[MaxKeyNum];//字符串的數(shù)組intlast;//詞表的長度}WordListType;//詞表類型(順序表)typedefstructLNode{//存放書號的鏈表intdata[3];structLNode*next;}LNode,*LinkList;typedefstruct{//存放關鍵詞的串char*ch;intlength;}HString;typedefstruct{HString*key;L
5、inkListbnolist;}IdxTermType;//索引項類型typedefstruct{IdxTermTypeitem[MaxKeyNum+1];intlast;}IdxListType;//索引表類型(有序表)char*buf;//書目串緩沖區(qū)WordListTypewdlist;//詞表inti;//無重復的關鍵字個數(shù)intb;//保留i的前一次變換的值intv;char*com[10]={"and","a","an","the","a","an","to","of"};1.1InitIdxList初始
6、化操作,置索引表idxlist為空表,且在idxlist.item[0]設一空串。IdxListType*InitIdxList(IdxListType*idxlist){idxlist=(IdxListType*)malloc(sizeof(IdxListType));if(idxlist==NULL){printf("ERROR——1!");exit(-1);}idxlist->item[0].key=(HString*)malloc(sizeof(HString));idxlist->item[0].bnoli
7、st=(LinkList)malloc(sizeof(LNode));idxlist->item[0].key->ch=NULL;idxlist->item[0].key->length=0;idxlist->item[0].bnolist->next=NULL;idxlist->last=0;returnidxlist;}1.2GetLine從文件f讀入一個書目信息到書目緩沖區(qū)buf其中v,buf是一個全局變量。當前設置的v最大是100,就是最多讀取100行書的信息。voidGetLine(FILE*f){intj
8、=0;staticchara[100][100];charc;c=fgetc(f);while(((a[v][j++]=tolower(c))!='')&&(c!=EOF))c=fgetc(f);//printf("%c",a[v][j-1]);a[v][j-1]='