数据结构大作业实验报告20xx302521 刘恋

时间:2024.3.31

《数据结构》实验报告

班级:_10011006_ 姓 名:__刘恋__ 学 号:_2010302521_ E-mail:_1020383169@qq.com_

日期:_20##年12月30日_

◎实验题目:

构建一个字典树,并实现相关的查找任务

◎实验目的:

设计存储结构完成字典树的构建以及设计程序完成其他功能

◎实验内容:

一、需求分析

1、 输入的形式和输入值的范围:

从文本中读入单词

2、 输出的形式:

将相应的查找结果输出到文本中

3、 程序所能达到的功能:

生成字典树并完成查找单词等的功能

4、 测试数据:

文本“vocabulary.txt”,“PrefixFrequenceWord.txt”,“TotPrefixWord.txt”,“SearchWordInVocabulary.txt”中的数据

二 概要设计

PTireNode TireTree(PTireNode node);

生成26叉树。

void InitTireTree(PTireNode Head, char str[], int num);

初始化字典。

void SearchWord(PTireNode Head, char str[], int num, FILE *f);

查找单词。

void ExportWord(PTireNode node, FILE *f);

按字典序顺序输出具有相同词头的单词。

void GetTenPreWord(PTireNode node);

找到频率最高的十个单词。

PTireNode ReadPrefix(PTireNode Head, char str[], char word[]);

读入词头并判断词头是否存在。

主程序流程:

第一步:输出提示语,用户输入数据。

第二步:判断用户的输入值,选择对应的程序实现相应的功能。

第三步:直至用户输入结束程序指令,否则重复执行第一步和第二步。

主程序中除去几个提示语句的输出,其余的操作全部调用函数完成。

三 详细设计

  实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法;画出函数的调用关系。 

Main()

Inputchar(from 1 to 6)

Switch()

Case 1: task1

Case 2: task2

Case 3: task3

Case 4: task4

Case 5: task5

Case 6: exit program

End

四 使用说明、测试分析及结果

1、 说明如何使用你编写的程序;

根据程序的提示语句便可使用。

2、 测试结果与分析;

测试结果和给予的程序调试结果相同

3、 调试过程中遇到的问题是如何解决提以及对设计与实现的回顾讨论和分析;

在编写第一个程序,也就是构建字典树时,并没有遇到很大问题,然而在开始编写查找单词的有关程序时便遇到了困难。其中,最主要的是对26叉树的递归遍历没能很好的写出,始终纠结在遍历算法中,没有正确认识递归的使用方法,使得我在编写程序时始终不能完成程序的功能,最终,在网上以及和同学探讨之后,理解了递归程序编写的要诀,进而完成了26叉树的递归遍历,为以后的程序奠定了基础,也让我对递归有了更深刻的认识。同时,在编写程序过程中,对递归过程中数据的记录有了更好的领悟。自己设计了一个存储结构体完成了对第三、第四、第五题的辅助存储,让程序能够顺利完成,但对于时间复杂度和空间复杂度没能很好的控制,程序的运行时间比参考时间长,很明显的是第四和第五题。或许是程序的存储结构需要改进,这个我会在接下来的时间里不断尝试,改进程序。

4、 运行界面。

程序的提示文字会引导用户使用此程序

五、实验总结

    加深了我对递归程序的理解,更加全面的让我认识到了递归操作在程序编写中所起的重要作用。同时,面对不同的问题构造不同的数据结构也让我对“数据结构”这门课程有了新的认识,提高了我将逻辑结构转化为物理结构的能了,增强了程序的编写能力。

(一) 需求分析

本程序主要是完成一个字典的构建以及相关的搜索功能

(二) 概要设计

根据程序需求,设计用26叉树完成字典树的建立的查询

1.基本操作:

void GetTenPreWord(PTireNode node)

  操作结果:找到频率最高的十个单词。

void ExportWord(PTireNode node, FILE *f)

  初始条件:字典树构建完成;

  操作结果:按字典序顺序输出具有相同词头的单词。

void SearchWord(PTireNode Head, char str[], int num, FILE *f)

   初始条件:字典树构建完成;

   操作结果:查找单词并输出结果到文本中。

PTireNode TireTree(PTireNode node)

   操作结果:生成26叉树,进而生成字典。

2.本程序包含三个模块:

(1)主程序模块;

(2)判断用户输入并选择程序功能模块

(3)运算和输出模块;

模块调用图:

 (三) 详细设计

1.元素类型,结点类型和指针类型:

typedef struct TireNode//存储的结构体:26叉树

{

    char letter;

    int tag,frequency;

    long order;//单词输入的次序

    TireNode *add[MAX_VERTEX_NUM];

}TireNode,*PTireNode;

typedef struct Record//用于作为中间存储的结构体

{

    char record[50];//记录单词

    int frequency;//记录相应单词的频率

    long order;//记录相应单词的输入顺序

}record;    

   

2.每个模块的分析:

(1)主程序模块:

int main()

{

    char tag;

    WelcomeDesk();//调用函数输出程序开始界面

    do

    {

        tag=getchar();//用户输入选项

        Selection(tag);//判断用户的输入并调用函数完成程序的功能

    }while(1);

    return 0;

}

(2)判断用户输入并选择程序功能;

void Selection(char tag)

{

//调用Task1—Task5完成程序的功能

    switch(tag)

    {

    case '1': {Task1();system("cls");WelcomeDesk();break;}

    case '2': {Task2();system("cls");WelcomeDesk();break;}

    case '3': {Task3();system("cls");WelcomeDesk();break;}

    case '4': {Task4();system("cls");WelcomeDesk();break;}

    case '5': {Task5();system("cls");WelcomeDesk();break;}

    case '6': {system("cls");printf("\n\n\n\n感谢您的使用!\n");Sleep(2000);exit(-1);break;}

    }

}

函数调用关系图

3.完整的程序:(见源文件).

 (四) 程序使用说明及测试结果

1.程序使用说明

(1)本程序的运行环境为VC6.0。

(2)进入演示程序后即显示提示信息:

/*****************************************/

        欢迎使用本程序!

请按照选项进行操作

1:建立字典树

2:查找单词

3:输出前缀单词(按字典序顺序)

4:输出频率最高的十个前缀单词

5:输出字典中所有单词中频率最高的十个单词

6:退出程序

/*****************************************/

请选择程序的功能:

2.测试结果

结果分别输出“SearchWordInVocabulary_Result.txt”,“PrefixFrequence_Result.txt”,“TotPrefixWord_Result.txt”,“MostFrequenceWord.txt”中。

3.调试中的错误及解决办法。(遇到时给出)

一开始编写递归输出查询的单词,总是将新的单词连接到之前输出的单词后面,在调试过程中发现在我使用的简介存储结构字符串中,需要对字符串的下一个字母位置进行标记,从而在递归的过程中明确每一个存入的字母的位置,进而使用了“depth”这个“指针”指示字母的位置:进入递归的时候指针后移,跳出递归的时候指针回退。这样就完成了对字典树上不同层的字母的存储和输出,解决了遇到的问题。

4.运行界面

在每次程序完成功能后都会返回欢迎界面等待用户的再次选择,直到用户选择关闭程序才退出程序界面。(所有的操作结果输出到指定的文本中)

(五)、实验总结(实验心得)

本次程序实验大课,每天平均6个小时的程序编写让我真切的感受到一个计算机学院学生应该有的大学生活,虽然说长时间面对电脑不是一件好事,不过对于我们这个专业而言,只有长时间的在电脑上调试自己的程序才能对课本上学到的东西有更深刻的理解。同时,在编写程序过程中,和同学的交流也是至关重要的,互相的交流可能没有什么实际的结果,但会给自己的思路提供一个更广阔的平台,减少“弯路”,更快的达到程序的目的。同时,在程序实践中不能因为学习的越多,思路就越复杂。程序的目的是完成相应的功能,一昧的讲究程序结构的建设可能会抹杀我们程序的初衷,在本次试验过程中我就经历过这样的事情,一位同学用很简单,很直接的思路解决了一个问题,但我还是纠结在结构的构架上。虽然他的思路被证实在数据只要多一点点就无法执行,但也给我不少启示,程序的编写结构固然重要,但是思路的清晰和明了才是最重要的,否则程序只能是一团乱麻,并且还降低了编写程序的信心。实验大课结束了,但我还有后面几道题没能完成,其实第六题已经能够查找1000个文件了,但是数量一多程序就崩溃了,希望在以后的时间里我能够完成本次实验的所有题目,并对之前的程序加以优化。

教师评语:

实验成绩:

指导教师签名:      

批阅日期:      


第二篇:数据结构大作业实验报告要求 [1]


浙江工商大学计算机与信息工程学院

数据结构实验大作业报告

专 业:

班 级:

学 号: 1092110101 姓 名:

指导教师:

20xx年物流管理 物流10甲 汪法成 杨文武 月 12

一、 大作业报告内容包括以下几个部分

⒈ 问题描述:(题目)

⒉ 设计:

⑴ 数据结构设计和核心算法设计描述;

⑵ 主控及功能模块层次结构;

⑶ 主要功能模块的输入、处理(算法框架描述)和输出;

⑷ 功能模块之间的调用与被调用关系等。

⒊ 测试: 测试范例,测试结果,测试结果的分析与讨论,测试过程中遇到的主要问题及所采用的解决措施。

⒋ 使用说明和作业小结:

⑴ 使用说明主要描述如何使用你的程序以及使用时的主要事项;

⑵ 在小结中说明程序的改进思想、经验和体会;

⒌整理一份程序清单及运行示例的结果。

将以上各项文字材料及程序清单等装订成册,形成一个完整的报告。

题目从以下题目中任选一个,每人1个题目。

(三)停车场管理问题

[问题描述] 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。

[实现要求] 要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。

[实现提示] 汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。例如,(‘A’,,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,,5,20)表示5号牌照车在20这个时刻离去。整个程序可以在输入信息为(‘E’,0,0)时结束。本题可用栈和队列来实现。

更多相关推荐:
大作业报告格式

供配电技术课程大作业报告书题目指导教师姓名学号日期机电工和系20xx20xx学年第2学期报告书格式要求一报告前置部分一摘要内容包括研究目的方法结果结论300字400字四部分二格式要求1中文摘要摘要黑体三号居中摘...

大作业报告格式

面向对象技术课程大作业设计报告书题目超市管理系统指导教师宋涛姓名学号日期20xx1122管理科学与工程学院20xx20xx学年第1学期一需求分析随着小型超市规模的发展不断扩大商品数量急剧增加商品的各种信息量也成...

作业报告

关于仙林大学城饮料消费行为调查分析报告调查背景仙林大学城现在拥有的院校主要有南京大学南京师范大学南京财经大学南京邮电大学南京中医药大学南京信息职业技术学院南京理工大学紫金学院应天学院南京森林警察学院南京体育学院...

大作业报告格式

数据库原理大作业作业题目小组成员指导教师提交时间一需求分析功能分析功能结构图提取数据过程以及结果二概念结构设计根据需求分析得到实体属性以及实体间联系用文字描述清楚最后得到ER图三逻辑结构设计根据ER图转换相应的...

毕业大作业实践报告

中国石油大学华东现代远程教育毕业大作业实践报告题目工商企业安全管理实践报告学习中心奥鹏学习中心年级专业网络09秋工商企业管理学生姓名学号实践单位南通腾宇混凝土有限公司实践起止时间20xx年4月20xx年7月中国...

大作业报告封面

下大作业报告学院名称东方学院专业计算机科学与技术题目学期13142班级学号姓名报告成绩答辩成绩教师姓名李秉璋20xx年6月程序设计基础1作业性质大作业程是学生在学习完程序设计基础下后为提高学生编写程序的能力要求...

毕业大作业(实践报告)

中国石油大学华东现代远程教育毕业大作业实践报告题目工商企业管理专业实践报告学习中心青岛校区学习中心年级专业工商企业管理学生姓名学号实践单位实践起止时间中国石油大学华东远程与继续教育学院完成时间年月日0中国石油大...

JSP大作业(报告模板)

课程名称实验项目姓名专业学号验报告WEB应用开发技术计算机信息管理20xx年月日实北京工业大学通州分校实验项目名称一实验目的1熟练掌握JSP运行环境的配置方法灵活运用JSP语法根据自己定义的题目通过JSP编程的...

大作业实验报告

西北工业大学软件技术专用软件技术大作业技术报告1西北工业大学软件技术专用2西北工业大学软件技术专用3西北工业大学软件技术专用4西北工业大学软件技术专用5西北工业大学软件技术专用6西北工业大学软件技术专用7西北工...

Java大作业报告

课程Java程序设计与应用开发题目登录系统与钟表实现班级XXXXXXXXXX学号XXXXXXXX姓名XXXX日期XXXXX1一大作业目的用面向对象语言JAVA完成登录系统和钟表的分析设计和实施通过课程设计掌握面...

Java大作业报告

Java大作业报告截止5月31日北方民族大学大作业报告游戏程序设计系部中心计算机科学与工程学院姓名从占启学号20xx20xx专业软件工程班级20xx级班课程名称Java语言程序设计作业题目名称扫雷游戏程序设计起...

.net大作业报告

NET开发技术基础大作业院系电子信息工程学院专业班级计算机科学与技术0902学生姓名丛云学号20xx441642成绩年月日1作业内容一题目2某公司有不同类型的员工经理秘书普通雇员会计每天早上830报道报道后根据...

大作业报告(32篇)