数据结构课程实训报告
- 格式:doc
- 大小:1.31 MB
- 文档页数:26
数据结构课程实训报告书
第 1 页
数据结构
课程实训报告
设计题目:
( 1 )基础题:5. 统计顺序串S中每一种字符出现的次数。
( 2 )综合题:1. 内部排序演示
2. 校园导游咨询
专 业:
班 级:
学 生:
学 号:
指导教师 :
起止时间 :
********学院
2010 年 6 月
数据结构课程实训报告书
第 2 页
第一章 需求分析
1.1 输入/输出形式和输出值的范围
(1)字符串S可为任意英文字符,长度限定在99999以内。最多输入128种不同的字符。
(2)内部排序问题中,输入的待排序数据,必须都是为整形数。此程序中设定了待排序数据为10个。如要修改,可在主函数(main)中将m.length改成你所需要的数据个数即可。主菜单选择对应功能时,可以输入任意数字,会有不同的结果。
(3)校园导游咨询程序。其才主菜单中只能输入整形数据,并且只能是1~4之间的数,否则将无法实现其对应的功能。在景点信息查询以及路经查询中也只能输入数字0~9;
1.2 程序功能
(1)基础题:5、编写程序,统计顺序串S中每一种字符出现的次数。
在在这个问题中,可由操作者自己输入字符串。系统会对输入的数据进行判断,将其字符串进行排序,把相同的字符放在一起。并且以ASCII码的顺序进行排序。能让我们很直观地验证结果的正确性,系统最后会输出每一种字符出现的次数。
(2)内部排序演示。
这个程序编写了多个函数,去实现对应的功能,分别是那六种排序方法,以及统计其在排序过程中,关键字所比较的次数,以及移动的次数。在此程序中,提供了操作人员自我选择的空间,可以自行选择所要的排序方法。也能选择重新输入待排序的数据,或者退出。当输入错误的时候,程序会提醒操作人员进行重新输入。
(3)校园导游咨询。
编写此程序,让我们能够通过此程序查询到校园景点的相关信息,为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 数据结构课程实训报告书
第 3 页
1.3 测试数据
1.3.1正确的输入及输出结果。
(1)字符串S问题;
1.首先输入待统计的字符串,并对输入的数据进行排序。排好续后,输入的字符串已经按照ASCII码的顺序进行了排序。这样,我们就能直观的看出每一种字符出现的次数了。
2.输出每一种字符出现的次数。将其与上图进行比较与验证,可以看出结果是否正确。
(2)内部排序演示问题。
程序开始就要求连续输入10个数据,输入完成,弹出对话菜单。操作人员可以选择对应的功能,输出排序的结果,以及关键字移动、比较的次数。
(3)校园导游咨询问题。
在此程序中输入正确的数据会得到正确的对应的功能,可以得到所有校园景点的代号、地名以及简介信息,最短路径以及其长度咨询。
1.3.2 错误的输入及输出结果
(1)字符串S问题。
在本题中,无错误的输入输出。所以程序也不存在有输入输出的提示。
(2)内部排序演示
在这程序中,当输入的待排序数据为非整形时,可能会使程序无法正常进行下去。比如输入6h,结过将是出现死循环。使内部排序演示失败。当在给出功能选择菜单的时候,如果输入的不是整形,也同样会出现死循环的结果。当输入其它整形数据的时候,程序会出现对应的提示,比如在菜单选择时,输入菜单中没有的选项,程序给出了提示,并要求重新选择。
(3)校园导游图
所有输入必须都是整形数字。如果输入错误,比如输入了字母,结果将是程序进入死循环。要是输入了除要求以外的整形数时,程序会给予提示,提醒你输入的数据错误,操作人员可以进行重新的选择输入,不会提供给操作人员错误的信息。
数据结构课程实训报告书
第 4 页
第2章 概要设计
2.1 设计思想
(1)用一维数组来保存输入的字符串,依然用原始的字符串保存排序后的字符串。在统计每个字符串出现的次数时,用两个一维数组分别保存每一种字符和每种字符出现的次数。
(2)用一个结构体保存数据长度,以及待排序的那10个数据。并且采用六种方法堆这10个数据进行排序(数据的个数可以通过对main()函数中m.length进行修改。其它地方不用修改即可。程序提供给操作人员一个自我选择的空间,可自由选择自己想要的对应功能。
(3)用一个结构体保存校园景点总数和各景点的代号、地名以及简介信息。本程序采用了读取(. txt)文件的方式进行数据信息的输入,使我们在修改这些信息的时候更方便、快捷。而且本程序还使用了较多的函数实现相应的功能。很程序更简洁。
2.2 函数间的关系
(1)字符串S问题中,程序的流程关系,如下图所示:
数据结构课程实训报告书
第 5 页 (2)内部排序演示的流程图;
(3)校园导游咨询流程图;
主函数main()
选择
程序终止 4 退出 1
景点信息查询
2
最短路径查询
3
输出所有景点 数据结构课程实训报告书
第 6 页 第3章 详细设计
(完整源程序见后面附录)
3.1 字符串S问题
其的源程序各功能函数的声明及说明如下:
void play(char s[],int h); //对输入的字符串进行统计,并输出。
3.2 内部排序演示
(1)结构体定义:
typedef struct{
int key; //数据值
}redtype;
typedef struct{
redtype r[11]; //存储数据的值;
int length; //数据的长度;
int flag; //标识符,确定大堆还小堆;
}sqlist;
(2)主要函数声明及功能描述如下:
void Bubblesort(sqlist &l); //(1)冒泡排序并输出结果
void insert(sqlist &l); //(2)直接插入排序并输出结果
void select(sqlist &l); //(3)直接选择排序并输出结果
void qsort(sqlist &l,int low,int high); //(4)快速排序
int partition(sqlist &l,int low,int high);
void shell_insert(sqlist &l,int dk); //(5)希尔排序并输出结果
void shell_sort(sqlist &l);
void heapadjust(sqlist &l,int s,int m); //(6)堆排序并输出结果
void heapsort(sqlist &l);
数据结构课程实训报告书
第 7 页 3.3 校园导游咨询
(1)结构体定义
#define max 100
#define endless 5000
#define t 20 //最大顶点数
typedef char dingdian; //顶点值类型
typedef int quanzhi; //权值类型
typedef struct{
dingdian vexnum[t][20]; //顶点信息域
quanzhi matrix[t][t]; //邻接矩阵
int n,e; //图中顶点总数与边数
}graph;
typedef struct
{ int n; //总景点数
int num[M]; //景点代号
char name[t][20]; //景点名称
char info[t][500]; //景点简介
}pic; //邻接矩阵表示的图类型
(2)主要函数声明及功能描述如下:
void creat(graph *g,char *s ,int c); //建立邻接矩阵;
void creats(pic *JINGDIAN,graph *g,char *s);//读取信息并创建;
void nm(int i); //统计、找出最短路径,并输出;
void GJ(graph g,int v0);
int bill(); //菜单选择;
void play(int m); //输出景点相关信息;
void find(int s); //查找景点信息;
数据结构课程实训报告书
第 8 页 第4章调试分析
4.1测试并列出测试结果
4.1.1字符串S问题测试结果。
1、首先输入待统计的字符串,并对输入的数据进行排序
此时,输入的字符串已经按照ASCII码的顺序进行了排序。这样,我们就能直观的看出每一种字符出现的次数了。
2、输出每一种字符出现的次数。将其与上图进行比较与验证,可以看出结果是否正确。