欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数据结构课程设计(18页).doc

    • 资源ID:37012131       资源大小:219.50KB        全文页数:17页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构课程设计(18页).doc

    -数据结构课程设计-第 17 页数据结构课 程 设 计 报 告 书题 目: 文本文件单词的检索与计数 专 业: 网络工程 学 号: 131007137 学生姓名: 张钦昆 指导教师: 王初阳 完成日期: 2014/6/7 目 录评分标准.241 设计任务书1.1 题目与要求题目:文本文件单词的检索与计数。要求:编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。建立文本文件,文件名由用户用键盘输入;给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。1.2 知识点 串的应用、文件、结构体、指针、数组、函数、函数的调用、循环语句、选择语句、输入输出控制、自定义类型等。1.3 输入输出分析(1)普通输入在文本文件的建立中,需要先定义串变量和文本文件,从而建立文本文件;根据实际情况,将单词的长度定义为20,规定每行最多输入110个字符。(2)对话式输入为便于转换及比较,对话式输入采用字符数组进行存储.为保障程序的健壮性,同时限制对话式输入的格式,对于非法的会话式输入则提示用户操作失败的原因。(3)程序输出为了能让程序输出时更加美观,程序输出主要以整齐为主,使得输出的程序结果均整齐输出。1.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; /*当前长度*/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 主程序调用模块图2.3 模块流程说明主函数对各主要模块进行调用,各个主要模块又分别调用其他子模块。下面用简要流程图对各主要模块进行说明。(1)建立文本文件主模块如图2所示,建立文本文件模块。首先定义一个串变量,然后调用void creat_text_file()函数,定义文本文件,键盘输入文件名,打开该文件,循环读入文本行,写入文本文件,最后关闭文件。开始定义一个串变量调用void creat_text_file()函数,定义文本文件键盘输入文件名打开文件,循环读入文本行,写入文本文件关闭文件、图2 建立文本文件模块(2)给定单词的计数主模块如图3所示为给定单词计数程图。 其实现过程如下;首先输入要检索的文本文件名,打开相应的文件,然后输入要检索统计的单词,循环读文本文件,读入一行,将其送入定义好的串中,并求该串的实际长度,调用串匹配函数进行计数。数最后关闭文件,输出统计结果开始输入要检索的文本文件名,打开相应文件输入要检索统计的单词使用while循环语句,调用sqlist_add(&sq, et, word)函数,循环读文本文件,送入定义好的串中关闭文件求该串的实际长度,调用串匹配函数partposition(s,t,k)进行计数,输出统计结果 图3单词计数模块(3)主控程序模块如图4为中控程序流程图。过程如下:输入头文件使用循环语句输出一下4个执行指令:1. 建立文本文档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 structelem_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 <stdio.h> #include <stdlib.h> #include <string.h> #define LIST_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 struct 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) int i; int j; for (i = 0; i < sq->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+;strcpy(eti.word, word);eti.count = 1; int sqlist_count(sqlist *sq, elem_type *et) int i; int j=0; for(i=0;i<sq->length;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"); 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 wordWORD_LEN+1;FILE *fp;int i;int j,q=0;int w,x,y=0;elem_type etLIST_INIT_SIZE;sqlist sq;sqlist_init(&sq, et);printf("请输入文件名:");scanf("%s", file_name);fp = fopen(file_name, "r");if (fp = NULL)printf("打开文件失败!n");return;while (fscanf(fp, "%s", word) != EOF)sqlist_add(&sq, et, word);fclose(fp);printf(" 单词 个数n");for (i = 0; i < sq.length; i+) x=strlen(eti.word);for(w=x-1;w>=0;w-)if(eti.wordw<65|(eti.wordw>90&&eti.wordw<97)|eti.wordw>122)eti.wordw=' 'for(w=0;w<x;w+)if (eti.wordw=' ')y+;if(y=x)eti.count=0;y=0;else y=0;if(eti.count!=0)printf("%20s%10dn", eti.word, eti.count);else q+;j=sqlist_count(&sq, et); printf("n%s的单词总数为%d个n",file_name,j);printf("n%s的非单词个数为%d种n",file_name,q);printf("n");int partposition (string s1,string s2,int k)int i,j;i=k-1; /* 扫描s1的下标,因为c中数组下标是从0开始,串中序号相差1 */j=0; /* 扫描s2的开始下标 */while(i<s1.length && j<s2.length)if(s1.chi=s2.chj)i+;j+; /* 继续使下标移向下一个字符位置 */elsei=i-j+1; j=0;if (j>=s2.length)return i-s2.length; /* 表示s1中存在s2,返回其起始位置 */elsereturn -1; /* 表示s1中不存在s2,返回-1 */* 函数结束 */ void substrcount()FILE *fp;string s,t; /* 定义两个串变量 */char fname10; int i=0,j,k;printf("输入文本文件名:");scanf("%s",fname);fp=fopen(fname,"r");printf("输入要统计计数的单词:");scanf("%s",t.ch);t.length=strlen(t.ch);while(!feof(fp)memset(s.ch,'0',110);fgets(s.ch,110,fp);s.length=strlen(s.ch);k=0; /* 初始化开始检索位置 */while(k<s.length-1) /* 检索整个主串S */j=partposition(s,t,k); /* 调用串匹配函数 */if(j<0 ) break;elsei+; /* 单词计数器加1 */ k=j+t.length; /* 继续下一字串的检索 */printf("n单词%s在文本文件%s中共出现%d次n",t.ch,fname,i);/* 统计单词出现的个数 */void substrint()FILE *fp;string s,t; /* 定义两个串变量 */char fname10;int i,j,k,l,m;int wz20; /* 存放一行中字串匹配的多个位置 */printf("输入文本文件名:");scanf("%s",fname);fp=fopen(fname,"r");printf("输入要检索的单词:");scanf("%s",t.ch);t.length=strlen(t.ch);l=0; /* 行计数器置0 */while(!feof(fp) /* 扫描整个文本文件 */ memset(s.ch,'0',110);fgets(s.ch,110,fp);s.length=strlen(s.ch);l+; /* 行计数器自增1 */k=0; /* 初始化开始检索位置 */i=0; /* 初始化单词计数器 */while(k<s.length-1) /* 检索整个主串S */j=partposition(s,t,k); /* 调用串匹配函数 */if(j<0) break;elsei+; /* 单词计数器加1 */wzi=j; /* 记录匹配单词位置 */k=j+t.length; /* 继续下一字串检索 */if(i>0)printf("行号:%d,次数:%d,位置分别为:",l,i);for(m=1;m<=i;m+)printf("第%4d个字符",wzm+1);printf("n");printf("n本软件自定义110个字节为一行nn"); /* 检索单词出现在文本文件中的行号、次数及其位置 */void substrio()void substrcount(),substrint();char t;while(1)printf("=n");printf(" 请输入:"); printf("|文本文件单词字串的定位统计及定位|n");printf("|=|n");printf("| a. 单词出现次数 |n");printf("| |n");printf("| |n");printf("| b. 单词出现位置 |n");printf("| |n");printf("=n");scanf("%c",&t);switch(t) case 'a': substrcount();break;case 'b': substrint();break;default: return;int main()void creat_text_file(),substrsum(),substrio();int xz;while(1)printf("=n");printf("| 文本文件的检索、字串的统计及定位 |n");printf("|=|n");printf("| 1. 建立文本文件 |n");printf("| 2. 单词字串的计数 |n");printf("| 3. 单词字串的定位 |n");printf("| 4. 退出整个程序 |n");printf("=n");printf(" 请选择(1-4)n ");scanf("%d",&xz);switch(xz)case 1: creat_text_file();break;case 2: substrsum();break;case 3: substrio();break;case 4: return 0;default:printf("选择错误,重新选 n");return 0;4 调试分析4.1 问题分析与回顾问题1:在语句“请输入一行文本”后边,只写一句接受语句,结果运行时,请输入文本和结束输入吗?演示在一起,并且不能接受文本输入。解决:和同学讨论后,加入了文本接受语句,成功运行。问题2:当要检索文本时,输入为空,或输入非建立的文本文件名,系统不能正常运行。分析:缺少判断语句。解决:当出现这种情况时,系统提示输入错误,请重新输入。4.2 算法时空分析确定给定单词出现的个数,需要统计文本文件中全部的单词,因此时间复杂度为O(n);确定给定单词出现的位置,需要显示其所在的行和列,时间复杂度为O(i*l);4.3 算法改进此算法虽然基本实现了功能,但却仍存在许多不足,例如当当前建立的文件名与之前相同时,没有错误提示,另如在对单词的检索方面,时间复杂度及空间复杂度仍不尽如人意。仍需要改进代码,达到算法的高效性。4.4 经验和体会通过本次数据结构的课程设计,让我对数据结构这门课有了更加深刻的认识。数据结构这门课程的理论性只是较强,要学好这门课程,就必要在掌握好理论知识的同时,加强上机操作,遇到问题,解决问题,这样才会有更大的进步。 我课程设计的题目是文件文本的检索与计数,由于这个课题要用到串的知识。而我对之前对串的定义却不是很明确,于是我有详细的学习了课本上的知识并查阅了很多文献。在着手作程序的过程中,经常遇到程序运行不出来,运行达不到效果等问题,尤其是接收文本,搜索时如何定位等方面遇到了很多问题。但我通过请教老师和同学,查阅文献,然后基本上解决了这些问题。在这个过程中我学到了很多,我认识到了坚持不懈的重要性,在我一遍一遍的调试下,终于成功的写出了程序。在编写此次程序时,我学会了先用流程图对进行算法分析,这样是自己的思路更加清晰,而不是像之前那样对整个函数没有整体的认知,而导致常常无从下手。之前我对数据结构的各种算法都感到畏惧,感觉很抽象,而这次通过自己几周的努力,在老师和同学们的帮助下,终于完成了此次课程设计,这对我来说无疑是极大的鼓舞,极大的增强了我学数据结构的自信心。而且我也充分认识到数据结构本身就是一门实践性很强的课程,只有加强实践,才能学得更好!5 测试结果(1) 输入建立文件名如图5所示为输入建立文件测试图5输入建立文件测试(2) 输入一行文本测试如图6所示建立一行文本,建立文件结束界面。图6 建立文件结束测试(3)单词字串的计数测试如图7,单词字串的计数测试界面。图7 单词字串的计数测试(4)单词字串的定位测试如图8和图9所示。 图8单词字串的定位测试 图9 单词字串的定位测试(5)程序结束退出,如图10所示图10 程序结束退出参考文献1 严蔚敏,吴伟民数据结构(C语言版)北京:清华大学出版社,20102 蒋清明,向德生 C语言程序设计 北京:人民邮电出版社,20083 尹德淳,龙脉工作室C函数速查手册 北京:人民邮电出版社,20094 闵敏,朱辉生数据结构高等教育出版社 编著 2003.45 张世和数据结构清华大学出版社 2004.116 李玲玲C程序设计清华大学出版社7 郑莉,董渊C+程序设计基础教程 清华大学出版社。8 社尹德淳C函数速查手册M北京:人民邮电出版,龙脉工作室20099 林小茶C语言程序设计10朱鸣华C语言程序设计教程11蒋文蓉数据结构高等教育出版社 2003.2评分标准程序(80)正确性(50)完成要求功能测试无错误(41-50)完成全部主要功能但有少许错误(31-40)完成一些功能但有错误(1-30)不能运行(0)创新性(10)比题目要求多完成三个功能以上(7-10)(1)如果正确性不能达到40分,创新性不予考虑。(2)要求多完成的功能必须能反映出工作量,否则不予以加分。比题目要求多完成两个功能(4-6)比题目要求多完成一个功能(1-3)仅完成题目要求(0)注释丰富程度(20)注释清楚(11-20)较多(6-10)少许(0-5)报告(30)层次、结构、逻辑性(10)合理(5-10)不甚合理(0-4)语言表达能力(10)行文流畅且仅有不多于5个错别字(5-10)不太通顺且有多于5个错别字(0-4)版面(10)版面整洁,布局合理(5-10)版面混乱,布局不合理(0-4)总分由于有创新分,有可能超过100分,超过者按100分算五级制成绩教 师 签 名: 批 改 日 期: 年 月 日

    注意事项

    本文(数据结构课程设计(18页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开