资源描述:
《数据结构课程设计最终报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、《数据结构》实验报告实验题目:现在有一个英文字典(每个单词都是由小写的'a'-'z'组成),单词量很大,达到120多万的单词,而且还有很多重复的单词。此外,我们现在还有一些Document,每个Document包含一些英语单词。针对这个问题,请你选择合适的数据结构,组织这些数据,使时间复杂度和空间复杂度尽可能低,并且解决下面的问题和分析自己算法的时间复杂度。◎实验目的:在本次课程设计中,希望同学们根据自己所学的知识,查找相关的资料,构造合适的数据结构,尽自己最大的努力解决这些问题,从而使自己学到更多新的知识。◎实验内容:1)基本型问题(1)选择合适的数据结
2、构,将所有的英文单词生成一个字典Dictionary。(2)给定一个单词,判断这个单词是否在字典Dictionary中。如果在单词库中,输出这个单词总共出现的次数。否则输出NO2)扩展型问题(3)给定一个单词,按字典序输出字典Dictionary中所有以这个单词为前缀的单词。例如,如果字典T={a,aa,aaa,b,ba},如果你输入a,那么输出应该为{a,aa,aaa}。(4)给定一个单词,输出在Dictionary中以这个单词为前缀的单词的出现频率最高的10个单词,对于具有相同出现次数的情况,按照最近(即最后)插入的单词优先级比较高的原则输出。(5)输
3、出Dictionary中出现次数最高的10个单词。3)高级型问题(6)现在我们有一些Document,每个Document由一些单词组成,现在的问题就是给你一个word,检索出哪些Document包含这个word,输出这些Document的DocumentID(就如同搜索引擎一样,即输入一些关键字,然后检索出和这些关键字相关的文档)。(7)在第(6)问中,我们只考虑了一个word在哪些Document中的情况,我们进一步考虑2个相邻word的情况,检索出同时包含这两个相邻word的DocumentID。4)挑战型问题(8)现在我们再对(7)的问题进行扩展,
4、把(7)中的只检索相邻2个word推广到可以检索多个word(即连续的k个word,其中k>=2),检索出同时包含k个连续word的DocumentID。一、需求分析1、本程序无需输入,通过文件的打开与读写得到最终结果。2、输出形式诸如“第步已完成,结果写入文件中”。3、建立字典树,对字典树进行一系列的操作。二概要设计为实现要求,应以字典树为存储结构。1.基本操作初始条件:字典树存在操作结果:建立其他数据结构,实现对字典树的查找及对结果的保存2.本程序包括六个模块(1)主函数模块(2)字典树建立模块(3)单词查找模块(4)查找以既定字串为前缀的所有字串(5
5、)查找同前缀字串中的前十个最高频词汇模块(6)查找出现频率最高前十单词模块三详细设计1.元素类型,结点类型和指针类型:structTrie_Node;intsign1,sign2=0,sign3=1,sign4=1;typedefstructNode_ele{intsign4;//用于表示插入时的优先级intnum;Trie_Node*next;intsign;char*word;//指向查询后的单词}Ele,*Ele1;2.(1)主函数模块voidmain()//主函数{PTrie_NodeHead=NULL;charword[20]={' '};Cr
6、eat_Trie(Head);charword1[50];printf("--------第一题完成--------");printf("");FILE*fp1=fopen("SearchWordInVocabulary.txt","r");//打开“读”文件FILE*fp2=fopen("SearchWordInVocabulary_Result.txt","w");//打开“写”文件inti=1;while(fscanf(fp1,"%s",word1)!=EOF){fprintf(fp2,"CASE%d:",i++);Search_Trie(H
7、ead,word1,fp2);}printf("--------第二题完成,结果写入文件SearchWordInVocabulary_Result.txt中--------");printf("");FILE*fp3=fopen("TotPrefixWord.txt","r");FILE*fp4=fopen("TotPrefixWord_Result.txt","w");PTrie_Nodeph;intj=1;while(fscanf(fp3,"%s",word1)!=EOF){ph=Search_Trie_1(Head,word1);if(ph==N
8、ULL){fprintf(fp4,"CASE%d:",j++)