新版数据结构课程设计.doc
《新版数据结构课程设计.doc》由会员分享,可在线阅读,更多相关《新版数据结构课程设计.doc(34页珍藏版)》请在咨信网上搜索。
1、数据结构课 程 设 计 报 告 书题 目: 文本文献单词的检索与计数 专 业: 网络工程 学 号: 学生姓名: 张钦昆 指导教师: 王初阳 完毕日期: 2023/6/7 目 录1 设计任务书21.1 题目与规定21.2 知识点21.3 输入输出分析21.4 测试数据分析22 概要设计32.1 结构体类型及函数声明32.2 主程序流程32.3 模块流程说明43 具体设计83.1 数据类型实现83.2 程序代码84 调试分析174.1 问题分析与回顾174.2 算法时空分析174.3 算法改善174.4 经验和体会175 测试结果18参考文献23评分标准.241 设计任务书1.1 题目与规定题目:
2、文本文献单词的检索与计数。规定:编程建立一个文本文献,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;记录给定单词在文本文献中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。建立文本文献,文献名由用户用键盘输入;给定单词的计数,输入一个不含空格的单词,记录输出该单词在文本中的出现次数;检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。1.2 知识点 串的应用、文献、结构体、指针、数组、函数、函数的调用、循环语句、选择语句、输入输出控制、自定义类型等。1.3 输入输出分析(1)普通输入在文本文献的建立中,需要
3、先定义串变量和文本文献,从而建立文本文献;根据实际情况,将单词的长度定义为20,规定每行最多输入110个字符。(2)对话式输入为便于转换及比较,对话式输入采用字符数组进行存储.为保障程序的健壮性,同时限制对话式输入的格式,对于非法的会话式输入则提醒用户操作失败的因素。(3)程序输出为了能让程序输出时更加美观,程序输出重要以整齐为主,使得输出的程序结果均整齐输出。1.4 测试数据分析在建立文本文献名时,规定键盘输入所建立的文本文献的名称,假如所输入的文本文献名称超过所给定的字符,将提醒输入错误,请重新输入。在第二次输入文本文献名称以供在此文本文献中查找所给定的单词,假如用户输入的文本文献名称与第
4、一次不符或输入为空,系统将提醒输入错误,请重新输入。在主控程序中,规定输入执行指令14,假如输入非14字符,系统将提醒输入错误,请重新选择2 概要设计2.1 结构体类型及函数声明(1)结构体1. typedef struct /* 定义顺序串类型 */ char chMaxStrSize; int length; string;2. typedef struct /*记录单词出现的次数*/ char wordWORD_LEN; int count; elem_type; 3. typedef structelem_type *elem; /*存储空间基址*/int length; /*当前长度
5、*/int listsize; /*当前分派的存储容量*/ sqlist; 函数:1.建立文献:void creat_text_file()2.单词记录:void sqlist_add(sqlist *sq, elem_type *et, char *word)3.文本文献中单词的总汇:void substrsum()4.单词的定位:void substrcount()5.主函数:int main()2.2 主程序流程(1)主程序调用模块图主程序运用switch()语句实现各个模块的调用,主函数调用如图1所示。主程序根据不同数值调用函数1建立文本文献2给定单词计数3检索单词在文本中的位置图1
6、主程序调用模块图2.3 模块流程说明主函数对各重要模块进行调用,各个重要模块又分别调用其他子模块。下面用简要流程图对各重要模块进行说明。(1)建立文本文献主模块如图2所示,建立文本文献模块。一方面定义一个串变量,然后调用void creat_text_file()函数,定义文本文献,键盘输入文献名,打开该文献,循环读入文本行,写入文本文献,最后关闭文献。开始定义一个串变量调用void creat_text_file()函数,定义文本文献键盘输入文献名打开文献,循环读入文本行,写入文本文献关闭文献、图2 建立文本文献模块 (2)给定单词的计数主模块如图3所示为给定单词计数程图。 其实现过程如下;
7、一方面输入要检索的文本文献名,打开相应的文献,然后输入要检索记录的单词,循环读文本文献,读入一行,将其送入定义好的串中,并求该串的实际长度,调用串匹配函数进行计数。数最后关闭文献,输出记录结果开始输入要检索的文本文献名,打开相应文献输入要检索记录的单词使用while循环语句,调用sqlist_add(&sq, et, word)函数,循环读文本文献,送入定义好的串中关闭文献求该串的实际长度,调用串匹配函数partposition(s,t,k)进行计数,输出记录结果 图3单词计数模块 (3)主控程序模块如图4为中控程序流程图。过程如下:输入头文献使用循环语句输出一下4个执行指令:1. 建立文本文
8、档2. 文本单词汇总 3. 给定单词定位4. 退出 如输入非14的指令,系统将提醒,输入错误请重新输入。结束。开始输入头文献输入四个执行指令输入的是否为14的执行指令? 否 是提醒:输入错误,请重新输入执行相应指令结束图4 主控程序模块3 具体设计3.1 数据类型实现 结构体:1. typedef struct /* 定义顺序串类型 */ char chMaxStrSize; int length; string;2. typedef struct /*记录单词出现的次数*/ char wordWORD_LEN; int count; elem_type; 3. typedef structe
9、lem_type *elem; /*存储空间基址*/int length; /*当前长度*/int listsize; /*当前分派的存储容量*/ sqlist; 函数:1. 建立文献:void creat_text_file()2. 单词记录:void sqlist_add(sqlist *sq, elem_type *et, char *word)3. 文本文献中单词的总汇:void substrsum()4. 单词的定位:void substrcount()5. 主函数:int main()3.2 程序代码 #include #include #include #define LIST_
10、INIT_SIZE 500 /*线性表存储空间的初始分派量*/ #define LISTINCREMENT 10 /*线性表存储空间的分派增量*/ #define FILE_NAME_LEN 20 /*文献名长度*/ #define WORD_LEN 20 /*单词长度*/ #define MaxStrSize 256 #define llength 110 /*规定一行有110个字节*/ typedef struct char chMaxStrSize; /* ch是一个可容纳256个字符的字符数组 */ int length; string;/* 定义顺序串类型 */ typedef st
11、ruct char wordWORD_LEN; /*存储单词,不超过20个字符*/int count; /*单词出现的次数*/ elem_type; typedef structelem_type *elem; /*存储空间基址*/int length; /*当前长度*/int listsize; /*当前分派的存储容量*/ sqlist; void sqlist_init(sqlist *sq, elem_type *et) sq-elem = et; sq-length = 0; void sqlist_add(sqlist *sq, elem_type *et, char *word)
12、int i; int j; for (i = 0; i length; i+) /*当前单词与加入的单词相同,直接记录,不做插入 */ if (strcmp(eti.word, word) = 0) eti.count+; return; if (strcmp(eti.word, word) 0)break;if (sq-length = LIST_INIT_SIZE)printf(空间局限性,单词%s插入失败n, word);return;for (j = sq-length; j i; j-)memcpy(et+j, et+j-1, sizeof(elem_type);sq-length+
13、;strcpy(eti.word, word);eti.count = 1; int sqlist_count(sqlist *sq, elem_type *et) int i; int j=0; for(i=0;ilength;i+) j=j+eti.count; return j; void creat_text_file() elem_type w; sqlist s; char file_nameFILE_NAME_LEN + 1,yn; FILE *fp; printf(输入要建立的文献名:); scanf(%s,file_name); fp=fopen(file_name,w);
14、yn=n; /* 输入结束标志初值 */ while(yn=n|yn=N) printf(请输入一行文本:); gets(w.word); gets(w.word); s.length=strlen(w.word); fwrite(&w,s.length,1,fp); fprintf(fp,%c,10); /* 是输入换行 */ printf(结束输入吗?y or n :);yn=getchar(); fclose(fp); /* 关闭文献 */ printf(建立文献结束!n); void substrsum()char file_nameFILE_NAME_LEN + 1;char wor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新版 数据结构 课程设计
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。