数据结构试验文学研究助手
实验报告(实验四文学研究助手)
实验报告(实验四文学研究助手)韶关学院学生实验报告册实验课程名称:数据结构与算法实验项目名称:实验四串及其应用文学研究助手实验类型(打? ):(基础、综合、设计? )院系:信息工程学院计算机系专业:*****姓名:*** 学号:*****指导老师:陈正铭韶关学院教务处编制一、实验预习报告内容预习日期:2007年 5 月 8日实验预习报告内容原则上应包括实验目的、实验所用的主要仪器药品、实验原理与公式、实验预习疑问等项目。
【实验目的】熟悉串类型的实现方法和文本模式匹配的方法,熟悉一般文字处理软件的设计方法以及较复杂问题的分解求精方法。
【需要分析】文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。
写一个实现这一目标的文字统计系统,称为“文学研究助手”。
【软件平台】Windows 2000,Visual C,, 6.0或WINTC【概要设计】参看《数据结构题集》P123【疑问】单链表中是否设头结点好,(这部分内容因人而异,也可不写)实验预习评分:二、实验原始(数据)记录实验时间: 2007 年 5 月 16 日(星期三第7,8 节) 实验同组人 :如有实验实验数据表格,学生在实验预习时应画好实验数据表格,供实验填写数据。
参看《数据结构题集》P134用源程序测试,把源程序重命名为“test.cpp”,存放于c盘根目录,运行程序,结果如下:请输入要搜索的文本(输入格式为:文本的存放路径\文本名.扩展名)c:\test.cpp请输入要搜索的单词(英文单词),如果是'#'则表示输入结束statusinttypedefifcout#搜索结果:status:出现的次数13;10,17,40,49,55,62,71,103,112,121,127,140,196行int :出现的次数11;10,15,19,20,25,27,79,91,96,143,149行typedef:出现的次数7;10,11,12,33,37,90,94行if :出现的次数9;28,42,105,114,151,153,154,184,198行cout :出现的次数18;43,96,106,115,118,130,152,179,183,184,188,191,199,200,211,21 8,222行是否继续进行搜索(Y/N)经测试,结果正确。
数据结构(C语言版)_第3章 串与数组
char data; struct lnode *next;
}lstring;
3.3.3 串的存储结构——链式存储结构
当结点大小>1时,可以采用块链结构。
#define CHUNKSIZE 100
/*可由用户定义块的大小*/
typedef struct Chunk
第三章 串与数组
本章要点
➢字符串的基本概念与基本运算 ➢字符串的存储和基本运算的实现 ➢数组的概念和基本运算 ➢数组的存储结构 ➢特殊矩阵的压缩存储及运算 ➢广义表的概念及相关术语 ➢广义表的存储形式
3.1 “文学研究助手”案例导入
“文学研究助手”引例:请从下面的英文文章里,统计其中 good出现的次数和位置,并查找单词the所在的行号,该行中出 现的次数以及在该行中的相应位置。
3.4.1 数组的定义
数组是n个具有相同类型的数据元素构成的有限序列,数组 中的数据是按顺序存储在一块地址连续的存储单元中。
数组中的每一个数据通常称为数组元素,数组元素用下标 区分,其中下标的个数由数组的维数决定。
若线性表中的数据元素为非结构的简单元素,则称为一维 数组,又称为向量;若一维数组中的数据元素又是一维数组结 构,则称为二维数组;依次类推,若二维数组中的元素又是一 个一维数组结构,则称作三维数组。
3.3.4 串的基本操作的实现算法
第二种顺序存储方式下几种基本操作的算法
算法1:串连接操作 算法2:串比较操作 算法3:取子串操作 算法4:串插入操作 算法5:串删除操作 算法6:串置换函数 算法7:子串定位操作
3.3.5 串的应用
【例3-1】设计一个算法求串s中出现的第1个最长重复子串 及其位置。
单词统计程序 C++
单词统计问题描述文字研究人员需要统计某篇英文小说中某些特定单词的出现次数和位置,试写出一个实现这一目标的文字统计系统。
这称为“文学研究助手”。
要求算法输入:文本文件和词集。
算法输出:单词出现的次数,出现位置所在行的行号(同一行出现两次的只输出一个行号)。
算法要点:(1)文本串非空且以文件形式存放。
(2)单词定义:用字母组成的字符序列,中间不含空格,不区分大小写。
(3)待统计的单词不跨行出现,它或者从行首开始,或者前置一个空格。
(4)数据结构采用二维链表,单词结点链接成一个链表,每个单词的行号组成一个链表,单词结点作为行号链表的头结点。
需求分析用户需求:用户可以通过该程序查询和统计一篇英文文章中某些特定单词出现次数和位置。
功能需求:用户可以输入单词来查询单词出现次数和位置;程序可以正确显示查询结果;用户可以选择是否在一次输出后继续查询;在一次查询中的结果记录到一个二维链表中。
概要设计为达到设计要求,本程序采用二维链表存储单词结点和相关的位置信息。
抽象数据类型:struct node{int col; //行坐标int row; //所在行的列坐标node* next; //指向下一个坐标结点的指针}; //单词坐标坐点类型struct Node{char words[20]; //单词数组node* ptr; //指向单词坐标结点的指针Node* next; //指向下一个单词结点的指针int num; //单词所含字符个数}; //单词结点class TLink{public:TLink() { head = NULL; }//构造函数~TLink()//析构函数{while( head != NULL ){Node* temp;temp = head;head = head -> next;delete temp;}}void Insert( char* Item );//前条件:参数Item[]为一个字符数组。
数据结构文学研究助手
数据结构1:姓名:陈东:学号:0706121462一、【实验目的】、【问题描述】三、【基本要求】四、【实验环境】五、【测试数据及其结果】六、【实验源代码】【实验目的】本次实习的主要目的是熟悉串类型的实现方法和文本模式匹配方 熟悉一般文学处理软件的设计方法,较复杂问题的分解求精方法。
【问题描述】文学研究人员需要统计某篇英文小说中某些形容词的出现次数和 位置。
试写一个是实现这一目标的文字统计系统,称为“文学研究助手”【基本要求】英文小说存于一个文本文件中待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。
果是每个词的出现次数和出现位置所在行的行数,格式自行设计。
四、【实验环境】Windows7, VC++6.0以自己的C 源程序模拟英文小说,C 语言的保留字集作为待统计的词汇集。
法,程序的输出结五、 【测试数据及其结果】六、【实验源代码】#i ncludevstdio.h> #in clude<stdlib.h> #i ncludeviostream.h> #defi ne MAXSTRLEN 255 #defi ne OK 1 #defi ne ERROR 0 #defi ne OVERFLOW 0typ edef char HStri ng[MAXSTRLEN+1]; typ edef int status; int n ext[MAXSTRLEN]; char *chars;typ edef struct{char *ch; int len gth;}SStri ng;char* ToStri ng(char array[], i nt array_size)// 字符数组转换成字符串{ "char *p;int i;P = (char*)malloc(array_size + 1);for(i = 0; i < array_size; i++)*(p+i) = '0' + array[i]; }*(p+i) = '\0'; return p;}status StrAssign(SString &T,char *chars)// 生成一个其值等于串常量chars 的串T {int i;int j;char *c;for(i=0,c=chars;*c!='\0';++i,++c);if(!i){T.ch=NULL;T.le ngth=0;}else{if(!(T.ch=(char *)malloc(i *sizeof(char))))exit(OVERFLOW);for(j=0;j<i;j++){T.ch[j]=chars[j];}T.le ngth=i;return OK;}void get_next(SString T,int next[])// 求next 值{"int j=1,k=0;n ext[1]=0;while(j<T.le ngth)//abaabcac{if(k==0||T.ch[k-1]==T.ch[j-1]){++j;++k; n ext[j]=k;}else k=n ext[k];}} int Index(SString S,SString T,int pos)// 匹配算法kmp {int i=po s,j=1;while(i!=S.le ngth+1 &&j!=T.le ngth+1) {if(j==0||S.ch[i-1]==T.ch[j-1]){j++;i++;} elsej=n ext[j];}if(j>T.le ngth-1)return (i-T.le ngth); elsereturn 0;void find(SString keys)// 查找单词{status StrAssig n( SStri ng &T,char *chars);int coun t=0;SStri ng T;HStri ng text;int i=1,j=0;FILE *fp;if(!(fp=fo pen( "1.txt","r"))){prin tf(" Open file error!\n"); exit(0);}get_ next(keys, next);while(!feof(fp)){fgets(text,MAXSTRLEN,fp);ToStri ng(text, sizeof(text)/sizeof(text[O])); chars=text;StrAssig n( T,chars);j=ln dex(T,keys,j+1);if(j!=0){coutvv"row="vvivv",col="vvjvve ndl; coun t++;while(j!=0){j=ln dex(T,keys,j+1);if(j!=0){ coutvv"row="vvivv",col="vvjvve ndl; coun t++;}}i++;}coutvv" nu mber is:"<<co un t<<e ndl;void main(){SStri ng S;char words[20];int n,i;prin tf("How many words do you want to find?(n <10 )\n"); sca nf("%d",&n); printfC'P lease input the words you want to fin d:\ n"); for(i=0;i< n;i++) {cin> >words;ToStri ng(words, sizeof(words)/sizeof(words[0])); chars=words;cout<<"the "vvcharsvve ndl;StrAssig n( S,chars);fin d(S);。
数据结构课程设计实验报告
青岛理工大学数据结构课程设计报告题目一:魔王语言解释题目二:文学研究助手院(系):计算机工程学院学生姓名: 龚剑勇班级:计算机科学与技术092学号:200907079起迄日期: 2011/6/20——2011/6/30指导教师: 张艳2010—2011年度第 2 学期题目一:魔王语言解释一、需求分析[问题描述]有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:(1)α-> β1β2…βm(2)(θδ1δ2…δn)->θδnθδn-1…θδ1θ在这两种形式中,从左到右均表示解释。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
[基本要求]用下述两条具体规则和上述规则形式(2)实现。
设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。
魔王语言可含人的词汇。
(1)B -> tAdA(2)A -> sae[测试数据]B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。
t d s a e z g x n h天地上一只鹅追赶下蛋恨二、概要设计1,程序设计思路(1)以一维数组demon[ i ]表示魔王语言.(2)魔王语言由用户输入,初始保存在demon[ i ]中.(3)魔王语言与人类语言对应关系固化在程序中.(4)实现过程:A:初始,魔王语言接收后存放在demon[ i ]中.B:初次遍历数组,将数组中括号内的元素入栈,同时插入相应首字母;C:再次遍历数组,将数组元素依次入队。
(小写字母直接入队;大写字母经翻译成相应字符后入队;遇到括号,将栈中保存的元素依次出栈入队)在翻译过程中,如果依旧包含大写字母,则置flag为1,否则为0。
文学研究助手
题目:文学研究助手【问题描述】文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。
试写一个实现这一目标的文字统计系统,称为“文学研究助手”。
【基本要求】英文小说存放于一个文本文件中。
待统计的词汇集合要依次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。
程序的输出结果是每个词的出现次数和出现位置所在行的行号,格式自行设计。
【选作内容】(1)模式匹配要基于KMP算法(2)整个统计过程中只对小说文字扫描一遍以提高效率实验完成情况:②作内容与基本要求都已完成。
②附加了二个功能:算出了所查询的关键词在其出现行的具体位置和在此行出现的次数。
③序共达376行。
程序特色之处:A、用了KMP算法,大大提高了运算速率B、熟练且灵活地运用了链表知识C、熟练且灵活地运用了结构体知识概要设计:【抽象数据类型定义】ADT数据对象:英文字母、空格和标点符号的集合数据关系:其集合构成一篇可读性的文章基本操作:InitList(&L)操作结果:构造一个空链表;InitList_node(&L)操作结果:构造一个总链表里的分链表;copy( &T, chars) (&L)初始条件:已知chars 操作结果:chars数组中的字符付给T.ch;并计算出chars 的长度赋给T.lengthCreateNode(&sl, str)这个函数建立的是总链表里面的结点初始条件:已知str操作结果:建立sl结构体中某要素的节点,并将str相应值赋值给slCreateNode_node (&sl, str)这个函数建立的是总链表里面分链表的结点初始条件:已知str 操作结果:建立sl结构体中某要素的节点,并将str相应值赋值给sladdnode(&ls, link)这个函数建立的是总链表初始条件:已知ls和link 操作结果:将link附加到ls后面add_node(&ls, link)这个函数建立的是总链表里分链表初始条件:已知ls和link 操作结果:将link附加到ls后面Index_KMP (s, t, pos)初始条件:已知字符串s,t 操作结果:找出s中与t相同的开始位置IsNotCharactor(ch)初始条件:已知字符ch操作结果:判断ch是否为英文字母ShowList_node(L)初始条件:已知一个链表的头结点操作结果:将链表的中信息打印出来,并将链表的某些信息再传递下去ShowList(L)初始条件:已知L的相关信息操作结果:打印出L的相关信息find(&stringLinkList, hstrLine, row)初始条件:已知stringLinkList, hstrLine, row操作结果:在串数据链表stringLinkList,读出查找的串strkey,与传入的串hstrLine匹配如果成功将匹配的次数与行数row,写入相对应的行行数据链表Next(s, j)初始条件:已知s,j操作结果:KMP模式匹配的next函数,即找出自身匹配Count_KMP(s, t, pos)初始条件:已知字符串s和t,pos操作结果:求串t在s中出现的次数程序使用说明A.输入正确的打开文件方式,例如:h:\code.txtB.输入所要查询的单词,每输入一个单词就按回车,并最后以符号“#”结束、【程序模块调用关系】A 结构体调用情况整个结构体框架主要以建立两层链表为主体。
《数据结构》课程设计题目
《数据结构》课程设计题目《数据结构》课程设计题目课程设计题一:学生成绩管理系统设计目的:1.2.3. 掌握线性链表的建立。
掌握线性链表的基本操作。
掌握查找的基本算法。
设计内容:利用线性链表实现学生成绩管理系统,具体功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出,并能在屏幕上输出操作前后的结果。
设计要求:1.2.3.写出系统需求分析,并建模。
编程实现,界面友好。
输出操作前后的结果。
课程设计题二:停车场管理系统设计目的:1.2.3.4. 掌握栈和队列的建立。
掌握栈和队列的基本操作。
深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们。
加深对栈和队列的理解和认识。
设计内容:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。
每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
设计要求:1. 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
2. 每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
3. 对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费,功能可自己添加)。
数据结构实验题目
实验题目一一、单链表基本运算【问题描述】设计并实现线性表的单链表存储和运算。
【基本要求】实现单链表的插入、删除和遍历运算,每种操作用一个函数实现。
插入操作:将一个新元素插入表中指定序号的位置。
删除操作:将指定序号的元素从表中删除。
遍历操作:从表头按次序输入所有元素的值,若是空表,则输出信息“empty list!”。
【实现提示】程序运行时,首先在main函数中创建空的、带头结点的单链表。
然后多次调用实现插入操作的函数(每次都将元素在序号1位置上插入),将元素依次插入表中,最后调用实现遍历操作的函数输出所有元素。
之后再多次调用实现删除操作的函数将表还原为空表(每次都删除第1个元素,每删除一个元素后,将表中剩余元素都输出一次)。
【测试数据】输入数据:1 2 3 4 5 0(为0时结束,0不存入链表)第一次输出:5 4 3 2 1第二次输出:4 3 2 1第三次输出:3 2 1第四次输出:2 1第五次输出:1第六次输出:empty list!二、约瑟夫环问题【问题描述】编号为1,2,...,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
现在给定一个随机数m>0,从编号为1的人开始,按顺时针方向1开始顺序报数,报到m时停止。
报m的人出圈,同时留下他的密码作为新的m值,从他在顺时针方向上的下一个人开始,重新从1开始报数,如此下去,直至所有的人全部出列为止。
【基本要求】利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。
【测试数据】M的初始值为20;n等于7,7个人的密码依次为:3,1,7,2,4,8,4。
输出为:6,1,4,7,2,3,5【实现提示】程序运行时,首先要求用户指定初始报数上限值,然后读取各人的密码。
可设n≤30。
此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。
【选作内容】用顺序存储结构实现该题目。
三、一元多项式相加、减运算器【问题描述】设计一个一元稀疏多项式简单计算器。
文学助手研究
【问题描述】 文学研究人员要统计某篇英文小说中某些形容词的出现次数和位置.试写一个实现这一目标的文学统计表,称为"文学研究助手" 【基本要求】a。
英文小说存在于一个文本文件中.待统计的词汇集合要一次输入完毕,即统计工作必须 在程序的一次运行之后完成.程序的输出结果是每个词的出现次数和出现位置所在行的行号, 格式自行设计b。
模式匹配要基于 KMP 算法 c。
整个统计过程中只对小说文字扫描一次,以提高效率 【测试数据】以当前的源程序文件作为测试目标【实现提示】约定小说中的词汇一律不跨行【思路演示】【代码过程】 1。
Try to write a text to achieve this objective statistical system, known as the literary research assistants. English novel stored in a text file. Statistical terms to be set to enter the end, that is, the statistical work program must be run after a fully completed. Process the output result is the emergence of each word occurrence frequency and the line number where the line, the format design.1. #include <iostream> 2. #include <string>3. using namespace std; 4. #include <> 5. struct word 6. { 7. int line; 8. int time; 9. word * next; 10. }; 11. struct words 12. { 13. char word_re[20]; 14. int check; 15. int time_t; 16. words * next_s; 17. word * next; 18. }; 19. words * input(words * head); //比較並儲存信息時候所用的函數 20. words * output(words * head); //單純輸出直觀數據時候所使用的函 21. words * input(words * head) 22. { 23. int count=0; 24. int line=0; //記錄行數所使用到的變量 25. int time_words=0; 26. head->next_s=new words; 27. int check=1; 28. words * insert=new words; 29. word * insert_word=new word; 30. insert=head->next_s; 31. cout<<"请输入需要查询的单词"<<endl; 32. while(check) 33. { 34. cin>>insert->word_re; 35. insert->time_t=0; 36. insert->check=0;37. insert->next=new word; 38. cout<<"还希望搜索其他的单词么,1 继续,0 停止"<<endl;39. cin>>check;40. if(check>=1)41. {42.insert->next_s=new words;43.insert=insert->next_s;44. }45. }46. insert->next_s=NULL;47. insert=head->next_s;48. while(insert!=NULL)49. {50.cout<<insert->word_re<<endl;51.insert=insert->next_s;52. }53. insert=NULL;54. int time=0;55. int time_gk=0,time_wt=0;56. char compare[3]=" @";57. char getkey[32];58. char * word_tair;59. FILE * getword;60. if((getword=fopen("","r"))==NULL)61. {62.cout<<"error";63.return 0;64. }65. char word_c[80]; 66. while(fgets(word_c,80,getword)!=NULL) //讀取一行中的 80 個字符67. {68.line++;69.time_words=0; //尋找的字符出現的次數70.time_gk=0; //儲存用來比較的字符串所使用的變量71.time_wt=0; //在儲存行字符串的變量中定位72.word_tair=NULL;73.word_tair=word_c;74.time=strlen(word_tair);75.cout<<time;76.cout<<word_tair<<endl;77.while(word_tair[time_wt]!='\n')78.{79.time_gk=0;80.if((word_tair[time_wt]<='z'&&word_tair[time_wt]>='a')||(word_tair[time_wt]<='Z'&&word_tair[time_wt]>='A')||word_tair[time_wt]=='-')81.{82.83.while((word_tair[time_wt]<='z'&&word_tair[time_wt]>='a')||(word_tair[time_wt]<='Z'&&word_tair[time_wt]>='A')||word_tair[time_wt]=='-')84.{85.86.getkey[time_gk]=word_tair[time_wt];87.time_wt++;88.time_gk++;89.} //讀取出一個單詞,並儲存在新的變量中90. getkey[time_gk++]='\0';91. insert=head->next_s;92. while(insert!=NULL)93. {94.if(!strcmp(insert->word_re,getkey))95.{96.count=insert->check;97.insert->check++;98.insert_word=insert->next; //判斷是否是相同的單詞99.while(count>0)100.{101.insert_word=insert_word->next;102.count--;103.}104.insert_word->line=line;105.insert_word->time=time_words;106.insert_word->next=NULL;107.insert_word->next=new word;108.break;109.} //儲存相應信息110.insert=insert->next_s;111.}112.time_words++;113.}114.if(word_tair[time_wt++]=='\n')115.break;116.117. } 118. } 119. cout<<endl; 120. return head; 121. } 122. //輸出的函數:123. words * output(words * head)124. {125. int time=0;126. words * first=head->next_s;127. words * insert=first;128. word * insert_word=new word;129. while(insert!=NULL)130. {131. cout<<insert->word_re<<"单词共出现了"<<insert->check<<"次"<<endl;132. insert_word=insert->next;133. while(insert->check>time)134. {135.time++;136.cout<<"第"<<time<<"次出现在"<<insert_word->line<<"行,第"<<insert_word->time+1<<"个单词"<<endl;137.insert_word=insert_word->next;138. } 139. insert=insert->next_s; 140. time=0; 141. } 142. return head; 143. } 144. int main() 145. { 146. words * head_emp=new words; 147. strcpy(head_emp->word_re,"this is empty"); //母鏈的頭賦空 148. head_emp->check=-1; 149. head_emp->time_t=0; 150. head_emp->next=NULL; 151. input(head_emp); 152. output(head_emp); 153. return 0; 154. 155. }。
文学研究助手数据结构报告
文学研究助手数据结构报告武汉理工大学华夏学院课程设计课程名称数据结构题目文学研究助手______ 年____ 月 ____ 日文学研究助手设计目的(1 )使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。
(2)使学生掌握数据库设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。
(3)使学生学会使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。
问题描述文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。
试写一个实现这一目标的文字统计系统,称为“文学研究助手”。
基本要求英文小说存于一个文本文件中。
待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。
程序的输出结果是每个词的出现次数和出现位置所在行的行号,格式自行设计算法思想本次课程设计使用的是串模式匹配的KMP算法,模式匹配算法KMP为普通模式匹配的改进,优点在与时间复杂度由原来的O(n*m)变为0(n+m),即是说统计时间大大缩短。
当要统计的词汇量很大时,计算机统计所需时间将很漫长,如果使用者急需使用统计结果,这是又因为统计太慢导致研究受阻,这样就得不偿失了。
而本程序将大大改善这种状况,让计算机在短时间内统计出使用者想要的统计结果。
本程序虽然精简,但是对模式匹配算法KMP勺使用极其灵活,需灵活调用模式匹配算法KMP的函数来快速解决问题。
该算法的核心思想是:每当一趟匹配过程中出现字符比较不等时,不需要回测指针,而是利用已经得到的“部分匹配”的结果将模式向右滑动尽可能远的一段距离后,继续进行比较。
模块划分本次课程设计所用到的程序主要包含四个模块,分别是主程序模块、有序表单元模块、单词单元模块和单词文本串文件单元模块。
其中主程序模块需要实现的功能是,输入文本并统计文件中每个需要测试的单词出现的次数和位置,并输出结果。
源程序#i nclude <stdio.h>#include <stdlib.h>#defi ne MAXSTRLEN 255 // 最大串长typedef char SStri ng[MAXSTRLEN+1];intnext[MAXSTRLEN]; //KMP 算法中用到的nextint In dex(SStri ng S,SStri ng T,i nt pos) //KMP 算法{int i=pos,j=1;while(i<=S[0]&&jv=T[0])if(j==O||S[i]==T[j]) {++i;++j;}elsej=n ext[j];if (j>T[O]) return (i-T[O]);elsereturn 0;int len th(SStri ng str) // int i=1;while(str[i]) i++;return(i-1);void fin d(char n ame[],SStri ng keys) // SStri ng text; // 用于存放从小说文件读取的一行字符串求串长查找函数int i=1,j=0,k,q=0; //i 用于存放行号, j 用于存放列号,k 用于输出格式的控制,q 用于统计出现次数FILE *fp;if (!(fp=(fope n(n ame,"r")))) // 打开小说文件printf ("打开文件出错!\n");exit(0);text 串中if (j!=0)i++; II 行号加1,在下一行中寻找q+=k; //累加k 以统计关键字出现次数printf("%s 出现 %d 次。
数据结构与算法课程设计计划书
魏晓鸣、焉德军、王玲芬、宋海玉、赵丹丹、赵晶莹、王存睿、孙世昶、孙晓
网络工程
李锡祚、刘向东、卢桂艳、姜楠、王波
教学起止周:第1至3教学周
一、教学目的与要求:
数据结构与算法课程设计的目的是使同学们能够根据数据对象的特性,合理的组织数据并能综合运用数据结构与算法基本知识和程序设计基本知识解决实际问题,培养基本的、良好的程序设计技能。
周三
周四
周五
第一周
上午
上午、下午
下午
上午
第二周
上午
上午、下午
下午
上午
第三周
上午
上午、下午
下午
上午
三、课程设计题目及具体要求:
1.成绩管理
问题描述:给出n个学生的考试成绩表,成绩表包括学生的学号、姓名、考试成绩(高等数
学、英语、物理),设计一个简单的成绩管理程序。
基本要求:
(1)建立成绩表,能够插入、删除、修改学生的成绩记录;
基本要求:输入表示小区间关系的图及每条管道的权值,选择出n-1条管道,使总投资最小。图的信息输入一次后,保存到文件中,选择的n-1条管道输出到显示器的同时,也保存于文件中。
测试用例:任意选择一个图,模拟小区间可能铺设的管道及费用。
提高要求:显示原始图及选择n-1条管道后的图。
7.安排教学计划(**)
测试数据:取某个单位电话号码簿中的30个记录。
提高要求:将电话号码薄以文件形式保存到盘上,能够按用户名和电话号码两种形式建立哈希表并实现插入、查找、删除表中元素的功能。
注意事项:不能用类库中的类完成题目
6.管道铺设施工的最佳方案(*)
问题描述:需要在某个城市的n个小区铺设管道,则在这n个小区之间铺设n-1条管道即可,假设任意两个居民区之间都可以架设管道,但由于地理环境的不同,所需经费不同,选择最优的施工方案使总投资尽可能的少。
Jstor数据库学术研究的好帮手
类学 亚 � 洲 学 非裔 美 国人 � 研究 � 经 济学 生 态学 数 式 查到 要查 找的 文章 数据 库提 供题 目 提 要 首页 � 学 哲学 政 治 学 � 教育 学 财 � 政 历史 文字 人口统 以及 全文 内容 方 便浏览 和查 看 如果 需要 也 可以 � 计 学 社 会 学 统计 学 非 洲研 � 究 拉美研究 中东研 下 载保 存 数据 库 提供 PD F 和 H T ML 格 式 在 具体 究 文 化研 � 究 电 影 民间传 � � � � 说� 表演 艺术 宗教 ( 2005 利 用 文献 上 也 非 常 方 便 和 其 他 数 据 库 一样 J � 年 底 完成 � 语 言 文字 等 艺 术和 人 文 学 科的 相 关 内 数据 库查 阅 下载 非常迅 速 特别 是这 一数 据库 是过 � 容 同 时又 包括 了物 理 � 数 学 工程学 和生 物学 生 态 刊数 据库 又 涉及 到众多 的学 科和 刊物 甚 至是 不同 � 学 植 � 物学 商业 等一 般科 学性 � 主题 而 且它 收集 从 的国 家 不同 的语 言 如果通 过传 统的 方式 在 很短 创 刊号 到 3
表 � 性学 术期 刊 通过 网络提 供 600 多 种期 刊全 文 是 相关 的学 术信 息 � 一 个 涵盖 � 面 广 内 容丰 � 富 查 阅 方便 的 过 刊 数据 库 再者 它 使用 方便 查阅 资料 快捷 � 为 学者 进行 学术 研究 提供 了极 大的 便利 库一 样 � 首先 J 数 据库 覆 盖 面广 它 不 但囊 括 了 人 子期 刊功 能 和 其它 数据 这一 数据 库也 提供 刊名 和学 科领域 浏览 电 读者 可以 用一 般检 索或 高级 检索的 方
摘
要�
数 据库 全 名为 数 据库� 简介 �学术 研究
3.1 文学研究助手
文学研究助手
一.实验目的
[问题描述]
文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置,试写出一个实现这一目标的文字统计系统,成为“文学研究助手”。
[基本要求]
英文小说存放在一个文本文件中;带统计的额词汇集合要以此输入完毕,即统计工作必须在程序的以此运行后全部完成;程序的输出结果是每个词的出现次数和出现位置所在的行号;格式自行设计。
二.实验内容
1、自定义数据类型
2、基本操作函数
3、主函数
四.实验的结果及分析。
五.实验中出现的问题、解决方法和心得体会
很明显,这个实验比较难,看到这个实验名字我根本不知道该从哪入手,但是没得选了。
不仅要写出实现各种功能的函数还要保证函数之间的连接,怎样通过函数之间的关系能很好的把函数连接起来,还要保证程序能够很好的而且有效的运行。
还有可能遇到一些以前没有用到的知识,像怎样在输入有误的情况下进行异常处理,这些都要通过函数的功能来实现,这些对我来说都是新的知识,而且觉得很有难度。
在做程序设计前还必须把书本上的基本知识搞懂,程序设计会用到书中的类做,对类的理解也不是很到位,一些概念的知识还没有很好的理解,所以还需要借助书中的知识来加深对类的理解。
所以,过程中有参考过别人的代码,一步一步写出来。
大学各科知识点总结app
大学各科知识点总结app在大学学习期间,我们需要掌握许多不同学科的知识,包括但不限于数学、物理、化学、生物、计算机科学、经济学、历史、文学等等。
为帮助大学生更好地学习这些知识,我们开发了一款大学各科知识点总结App,为用户提供多学科综合学习的便捷方式。
在这个App中,我们将针对不同学科的知识点进行总结和整理,提供清晰易懂的内容,帮助用户更好地理解和掌握各学科的基本知识。
同时,我们也会提供一些实用的学习工具,如概念地图、思维导图、练习题和答案等,帮助用户更好地进行学习和复习。
以下是我们App中包含的学科知识点总结内容:1. 数学数学是一门抽象而又实用的学科,包括代数、几何、微积分、概率统计等多个分支。
我们将在App中提供这些分支的基本概念、公式、定理、推导过程等内容,帮助用户更好地理解和掌握数学知识。
2. 物理物理学是探索自然现象规律的学科,包括经典力学、热学、电磁学、光学、量子力学等多个分支。
我们将在App中提供这些分支的基本概念、定律、公式、实验原理等内容,帮助用户更好地理解和掌握物理知识。
3. 化学化学是研究物质的组成、结构、性质和变化规律的学科,包括无机化学、有机化学、物理化学等多个分支。
我们将在App中提供这些分支的基本概念、化学反应原理、结构式、反应机理等内容,帮助用户更好地理解和掌握化学知识。
4. 生物生物学是研究生命现象和规律的学科,包括生物化学、细胞生物学、遗传学、生态学等多个分支。
我们将在App中提供这些分支的基本概念、生物实验原理、生物进化历程、生态系统等内容,帮助用户更好地理解和掌握生物知识。
5. 计算机科学计算机科学是研究计算机系统、算法、程序设计等内容的学科,包括数据结构、算法设计、计算机网络、操作系统等多个分支。
我们将在App中提供这些分支的基本概念、算法流程、程序设计原理、网络通信协议等内容,帮助用户更好地理解和掌握计算机科学知识。
6. 经济学经济学是研究资源配置、市场经济、宏观经济等内容的学科,包括微观经济学、宏观经济学、国际经济学等多个分支。
计算机在文学研究领域的应用
计算机在文学研究领域的应用计算机科技的快速发展已经渗透到各行各业,对于文学研究领域也带来了深刻的变革。
计算机在文学研究中的应用,不仅提高了研究效率,还拓展了研究手段和研究范围。
本文将探讨计算机在文学研究领域的应用,从计算机辅助文本分析、计算机生成文学作品以及计算机在文学教育中的应用三个方面来进行分析。
一、计算机辅助文本分析计算机辅助文本分析是计算机在文学研究中的重要应用之一。
随着文学研究的深入,人们对于文本的理解和解读趋于复杂和深层次,传统的阅读方法已经无法满足研究需求。
计算机辅助文本分析可以通过自然语言处理、数据挖掘等技术手段,帮助研究者更全面地分析文学作品。
首先,计算机辅助文本分析可以通过词频统计、情感分析等方法,帮助研究者深入挖掘文学作品中的主题和情感内涵。
研究者可以通过计算机程序对大量文本进行自动分析,找出其中的关键词汇和情感倾向,从而更好地解读文学作品的意义。
其次,计算机辅助文本分析还可以帮助研究者进行文学作品之间的比对和关联分析。
通过计算机的高效计算能力和强大的存储能力,研究者可以将多个文学作品进行大规模的比对,找出其中的共同点和差异性,进一步探索文学作品的发展脉络和演变规律。
二、计算机生成文学作品另一个计算机在文学研究领域的应用是计算机生成文学作品。
计算机生成文学作品是利用计算机算法和自然语言处理技术,通过人工智能的支持,创造出具有语义和艺术价值的文学作品。
计算机生成的文学作品可以填补文学创作领域中的空白,为文学的创作提供新的思路和灵感。
同时,计算机生成的文学作品也能够反映出计算机对于文学语言规律的理解和创造能力。
这在一定程度上促进了文学研究的发展和创新。
然而,计算机生成的文学作品也面临一些挑战和争议。
计算机生成的文学作品与传统文学作品相比,可能缺乏真实情感和创作者的个人风格,仅仅是一种机械的模仿。
因此,在计算机生成文学作品的过程中,需要平衡计算机算法的自动化和文学创作的独特性。
三、计算机在文学教育中的应用除了文学研究,计算机在文学教育中的应用也越来越受到关注。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#define MAXSTRLEN 255
#define OK 1
#define ERROR 0
#define OVERFLOW 0
using namespace std;
typedef char HString[MAXSTRLEN+1];
typedef int status;
int next[MAXSTRLEN];
char *chars;
typedef struct{
char *ch;
int length;
}SString;
char* ToString(char array[], int array_size)//字符数组转换成字符串
{
char *p;
int i;
p = (char*)malloc(array_size + 1);
for(i = 0; i < array_size; i++)
{
*(p+i) = '0' + array[i];
}
*(p+i) = '\0';
return p;
} status StrAssign(SString &T,char *chars)//生成一个其值等于串常量chars的串T
{
int i;
int j;
char *c;
for(i=0,c=chars;*c!='\0';++i,++c);
if(!i)
{
T.ch=NULL;
T.length=0;
}
else
{
if(!(T.ch=(char *)malloc(i *sizeof(char))))
exit(OVERFLOW);
for(j=0;j<i;j++)
{
T.ch[j]=chars[j];
}
T.length=i;
}
return OK;
}
void get_next(SString T,int next[])//求next值{
int j=1,k=0;
next[1]=0;
while(j<T.length)//abaabcac
{
if(k==0||T.ch[k-1]==T.ch[j-1])
{
++j;
++k;
next[j]=k;
}
else k=next[k];
}
}
int Index(SString S,SString T,int pos)//匹配算法kmp {
int i=pos,j=1;
while(i!=S.length+1&&j!=T.length+1)
{
if(j==0||S.ch[i-1]==T.ch[j-1])
{
j++;i++;
}
else
j=next[j];
}
if(j>T.length-1)
return (i-T.length);
else
return 0;
}
void find(SString keys)//查找单词
{
status StrAssign(SString &T,char *chars);
int count=0;
SString T;
HString text;
int i=1,j=0;
FILE *fp;
if(!(fp=fopen("1.txt","r")))
{
printf("Open file error!\n");
exit(0);
}
get_next(keys,next);
while(!feof(fp))
{
fgets(text,MAXSTRLEN,fp);
ToString(text, sizeof(text)/sizeof(text[0]));
chars=text;
StrAssign(T,chars);
j=Index(T,keys,j+1);
if(j!=0)
{
cout<<"row="<<i<<",col="<<j<<endl;
count++;
}
while(j!=0)
{
j=Index(T,keys,j+1);
if(j!=0)
{
cout<<"row="<<i<<",col="<<j<<endl;
count++;
}
}
i++;
}
cout<<"number is:"<<count<<endl;
}
void main()
{
SString S;
char words[20];
int n,i;
printf("How many words do you want to find?(n<10)\n");
scanf("%d",&n);
printf("Please input the words you want to find:\n");
for(i=0;i<n;i++)
{
cin>>words;
ToString(words,
sizeof(words)/sizeof(words[0]));
chars=words;
cout<<"the "<<chars<<endl;
StrAssign(S,chars);
find(S);
}
}。