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

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

《数据结构》实验报告

班级:_10011006_ 姓名:__刘恋__ 学号:_2010302521_ E-mail:_1020383169@https://www.360docs.net/doc/0e16121037.html,_ 日期:_2011年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、运行界面。

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

程序1 程序2 程序3 程序4 程序5 程序6

五、实验总结

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

(一)需求分析

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

(二) 概要设计

根据程序需求,设计用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;}

}

}

函数调用关系图

main()

Switch(program)

end

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)内容丰富,学习量大,给学习带来困难; (2)贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点; (3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度; (4)隐含在各部分的技术和方法丰富,也是学习的重点和难点。 根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。通过实验实践内容的训练,突出构造性思维训练的特征, 目的是提高学生组织数据及编写大型程序的能力。实验学时为18。 二、《数据结构课程实验》的目的和要求 不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能力。 三、《数据结构课程实验》内容 课程实验共18学时,要求完成以下六个题目: 实习一约瑟夫环问题(2学时)

数据结构迷宫问题实验报告

《数据结构与算法设计》迷宫问题实验报告 ——实验二 专业:物联网工程 班级:物联网1班 学号:15180118 :刘沛航

一、实验目的 本程序是利用非递归的方法求出一条走出迷宫的路径,并将路径输出。首先由用户输入一组二维数组来组成迷宫,确认后程序自动运行,当迷宫有完整路径可以通过时,以0和1所组成的迷宫形式输出,标记所走过的路径结束程序;当迷宫无路径时,提示输入错误结束程序。 二、实验内容 用一个m*m长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序对于任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 三、程序设计 1、概要设计 (1)设定栈的抽象数据类型定义 ADT Stack{ 数据对象:D={ai|ai属于CharSet,i=1、2…n,n>=0} 数据关系:R={|ai-1,ai属于D,i=2,3,…n} 基本操作: InitStack(&S) 操作结果:构造一个空栈 Push(&S,e) 初始条件:栈已经存在 操作结果:将e所指向的数据加入到栈s中 Pop(&S,&e) 初始条件:栈已经存在 操作结果:若栈不为空,用e返回栈顶元素,并删除栈顶元素 Getpop(&S,&e) 初始条件:栈已经存在 操作结果:若栈不为空,用e返回栈顶元

StackEmpty(&S) 初始条件:栈已经存在 操作结果:判断栈是否为空。若栈为空,返回1,否则返回0 Destroy(&S) 初始条件:栈已经存在 操作结果:销毁栈s }ADT Stack (2)设定迷宫的抽象数据类型定义 ADT yanshu{ 数据对象:D={ai,j|ai,j属于{‘ ’、‘*’、‘’、‘#’},0<=i<=M,0<=j<=N} 数据关系:R={ROW,COL} ROW={|ai-1,j,ai,j属于D,i=1,2,…M,j=0,1,…N} COL={|ai,j-1,ai,j属于D,i=0,1,…M,j=1,2,…N} 基本操作: InitMaze(MazeType &maze, int a[][COL], int row, int col){ 初始条件:二维数组int a[][COL],已经存在,其中第1至第m-1行,每行自第1到第n-1列的元素已经值,并以值0表示障 碍,值1表示通路。 操作结果:构造迷宫的整形数组,以空白表示通路,字符‘0’表示障 碍 在迷宫四周加上一圈障碍 MazePath(&maze){ 初始条件:迷宫maze已被赋值 操作结果:若迷宫maze中存在一条通路,则按如下规定改变maze的状态;以字符‘*’表示路径上的位置。字符‘’表 示‘死胡同’;否则迷宫的状态不变 } PrintMaze(M){ 初始条件:迷宫M已存在 操作结果:以字符形式输出迷宫 } }ADTmaze (3)本程序包括三个模块

vb大作业 实验报告

软件技术实验报告 学号2009300186 姓名赵佶男班级010109卓 越 大作业机房管理系统 课题基本目标要求: 1)可在系统中由系统管理员按班级指定时间进行上机课时安排,安排上机不得与其他已安排机时冲突。 2)在指定上机课时段,除了上机班级学生可以登录外,其余无关学生一律不得登录,除非系统管理员授权。预定上机时间结束时,自动 提前5分钟提示,待真正结束时即自动锁屏。 3)除上机课时安排以外,可以在机动时间段接受学生凭个人一卡通上机,且上机实施计时自动收费(即扣除学生一卡通上因上机而应缴 纳的上机服务费) 4)在接受零散学生付费上机时,可自动为其分配空闲机器并授权使用,在分配机器时应考虑机器的使用情况分布均匀,即每次分配机器是 前一时段未曾使用的机器,当学生一卡通上的余额,不足以支付1 小时上机服务费时,应提示其下机充值,并实施锁屏。 实验步骤: 首先,根据大作业的要求,我建立了机器表,流水表,学生基本情况表,上课表,以及一卡通表五个数据库表。机器表用来按照使用情况,选择空闲时间最长的机器。流水表用来记录现在机器以及人员使用的情况,是个

动态表,用来方便的取用和修改数据。学生基本情况表用来存放学生的学号,密码,班级等基本情况,以实现学生上课登录和自由登录。上课表存放各个班级的上课下课时间,以实现排课功能。一卡通表记录了每个学生一卡通内的金额,用来帮助实现上下机的扣费,以及余额不够支付一小时时间情况下得强制下机。 然后,我进行了窗体的设计。经过筛选优化,我设计了五个窗体,分别是主选择窗体,注册窗体,登录窗体,上课安排窗体,实时计费和下机窗体。 主选择窗体可以用来进行上课登录、学生自由登录、管理员登录和机器的推荐。注册窗体是用来进行学生登录密码的注册。登录窗体限制学生的学号和密码必须匹配才能登录。上课安排窗体可以输入班号、上下课时间并选择星期值。实时计费和下机窗体用来扣费并方便学生随时下机。 接下来,要按照要求进行代码的编写。 A)可在系统中由系统管理员按班级指定时间进行上机课时安排,安排上机不得与其他已安排机时冲突。 此功能我在排课窗体下用select选择出全体班级的上下课以及星期值,并将管理员希望的上下课时间转换为时间类型数值,进行循环比较,用do until 语句逐个比较,使得上下课时间点都不得在其他班级的上课时间段内。如果时间不冲突,就实施修改数据库的功能,并更新保存。 B)在指定上机课时段,除了上机班级学生可以登录外,其余无关学生一律不得登录,除非系统管理员授权。预定上机时间结束时,自动提前5分钟提示,待真正结束时即自动锁屏。 在主选择窗体内有上课登录按钮和自由登录按钮。点击上课登录,输入学

数据结构实验报告--图

. 数据结构实验报告 图

一、实验目的 1、熟悉图的结构和相关算法。 二、实验内容及要求 1、编写创建图的算法。 2、编写图的广度优先遍历、深度优先遍历、及求两点的简单路径和最短路径的算法。 三、算法描述 1、图的邻接表存储表示: 对图的每个顶点建立一个单链表,第i个单链表表示所有依附于第i个点的边(对于有向图表示以该顶点为尾的弧);链表的每个节点存储两个信息,该弧指向的顶点在图中的位置(adjvex)和指向下一条弧的指针(nextarc)。每个连表的头结点存储顶点的数据:顶点信息(data)和指向依附于它的弧的链表域。 存储表示如下: typedef struct ArcNode { int adjvex; // 该弧所指向的顶点的位置 struct ArcNode *nextarc; // 指向下一条弧的指针 // InfoType *info; // 该弧相关信息的指针 } ArcNode; typedef struct VNode { char data; // 顶点信息 int data2; int sngle; ArcNode *firstarc; // 指向第一条依附该顶点的弧 } VNode, AdjList[MAX_NUM]; typedef struct { AdjList vertices; int vexnum, arcnum; int kind; // 图的种类标志 } ALGraph; 2、深度优先搜索: 假设初始态是图中所有定点未被访问,从图中的某个顶点v开始,访问此顶点,然后依次从v的未访问的邻接点出发深度优先遍历,直至途中所有和v有相同路径的点都被访问到;若图中仍有点未被访问,则从图中另选一个未被访问的点作为起点重复上述过程,直到图中所有点都被访问到。为了便于区分途中定点是否被访问过,需要附设一个访问标致数组visited [0..n-1],将其初值均设为false,一旦某个顶点被访问,将对应的访问标志赋值为true。 2、广度优先搜索: 假设初始态是图中所有顶点未被访问,从图中的某个顶点v开始依次访问v的各个未被访问的邻接点,然后分别从这些邻接点出发以此访问他们的邻接点,并使“先被访问的邻接顶点”先于“后被访问的邻接顶点”被访问,直至图中所有已被访问过的顶点的邻接顶点都被访问。若图中仍有未被访问的顶点,选择另一个未被访问的顶点开始,重复上述操作,直到图中所有顶点都被访问。为了使“先

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

数据结构课程设计-迷宫问题的操作

1、课程设计目的 为了配合《数据结构》课程的开设,通过设计一完整的程序,掌握数据结构的应用、算法的编写、类C语言的算法转换成C程序并用TC上机调试的基本方法特进行题目为两个链表合并的课程设计。通过此次课程设计充分锻炼有关数据结构中链表的创建、合并等方法以及怎样通过转化成C语言在微机上运行实现等其他方面的能力。 2.课程设计的内容与要求 2.1问题描述: 迷宫问题是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒子中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口走到出口,而不走错一步。老鼠经过多次试验最终学会走通迷宫的路线。设计一个计算机程序对任意设定的矩形迷宫如下图A所示,求出一条从入口到出口的通路,或得出没有通路的结论。 图A 2.2设计要求: 要求设计程序输出如下: (1) 建立一个大小为m×n的任意迷宫(迷宫数据可由用户输入或由程序自动生成),并在屏幕上显示出来; (2)找出一条通路的二元组(i,j)数据序列,(i,j)表示通路上某一点的坐标。

3.2 概要设计 1.①构建一个二维数组maze[M+2][N+2]用于存储迷宫矩阵 ②自动或手动生成迷宫,即为二维数组maze[M+2][N+2]赋值 ③构建一个队列用于存储迷宫路径 ④建立迷宫节点struct point,用于存储迷宫中每个节点的访问情况 ⑤实现搜索算法 ⑥屏幕上显示操作菜单 2.本程序包含10个函数: (1)主函数main() (2)手动生成迷宫函数shoudong_maze()

C大作业图书管理系统实验报告

附件1: 学号:00126 《面向对象程序设计》 大作业 题目学生成绩管理系统 学院文法学院 专业教育学 班级教育学1201 姓名杨欣 指导教师鄢红国 2013 年12 月20 日

目录 一设计目的 (1) 二大作业的内容 (2) 三大作业的要求与数据 (3) 四大作业应完成的工作 (4) 五总体设计(包含几大功能模块) (5) 六详细设计(各功能模块的具体实现算法——流程图) (6) 七调试分析(包含各模块的测试用例,及测试结果) (7) 八总结 (8) 十参考资料 (9)

一大作业的目的 《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。 二大作业的内容 对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数等)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.将图书的信息进行记录,信息内容包含:(1)图书的编号(2)图书的书名(3)图书的库存量。假设,现收集到了一个图书馆的所有图书信息,要求用C语言编写一个简单的图书管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。 三大作业的要求与数据 1、用C语言实现系统; 2、对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出. 3、图书信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能: (1) 每一条记录包括一本图书的编号、书名、库存量 (2) 图书信息录入功能:(图书信息用文件保存,可以一次完成若干条记录 的输入。) (3) 图书信息显示浏览功能:完成全部图书记录的显示。 (4) 查询功能:完成按书名查找图书记录,并显示。 (5) 图书信息的删除:按编号进行图书某图书的库存量. (6) 借书登记系统:可以输入读者编号和所借书号来借书。 (7) 还书管理系统:可以输入读者编号和所借书号来还书。 (8)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!

数据结构上机实验报告

数据结构上机实验报告 学院:电子工程学院 专业:信息对抗技术 姓名:

学号: 教师:饶鲜日期:

目录 实验一线性表................................................. - 4 - 一、实验目的................................................ - 4 - 二、实验代码................................................ - 4 - 三、实验结果............................................... - 14 - 四、个人思路............................................... - 15 -实验二栈和队列.............................................. - 15 - 一、实验目的............................................... - 15 - 二、实验代码............................................... - 16 - 三、实验结果............................................... - 24 - 四、个人思路............................................... - 25 -实验三数组.................................................. - 26 - 一、实验目的............................................... - 26 - 二、实验代码............................................... - 26 - 三、实验结果............................................... - 28 - 四、个人思路............................................... - 28 -实验四树.................................................... - 29 - 一、实验目的............................................... - 29 - 二、实验代码............................................... - 29 -

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

sql大作业实验报告

目录 第一章、需求分析 (2) 1 、需求概述 (2) 2 、功能简介 (2) 第二章、概念结构设计 (3) 1、在员工实体内的E-R图 (3) 2、部门实体内的E-R图 (3) 3、在工资实体内的E-R图 (3) 第三章、逻辑结构设计 (4) 第四章、物理结构设计 (4) 第五章、数据库的实施和维护 (5) 一、数据库的创建 (5) 二、表格的建立 (5) 1、建立Employsse表插入数据并设计相关的完整性约束 (5) 2、建立departments表插入数据并设计相关的完整性约束 (7) 3、建立 salary表插入数据并设计相关的完整性约束 (8) 三、建立视图 (9) 四、建立触发器 (10) 五、建立自定义函数 (12) 六、建立存储过程 (13) 第六章、总结 (14)

第一章、需求分析 1 、需求概述 针对现代化公司管理情况,员工管理工作是公司运行中的一个重环节,是整个公司管理的核心和基础。它的内容对于公司的决策者和管理者来说都至关重要,所以公司管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件工籍,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 公司员工管理系统借助于计算机强大的处理能力,大大减轻了管理人员的工作量,并提高了处理的准确性。 能够进行数据库的数据定义、数据操纵、数据控制等处理功能,进行联机处理的相应时间要短。 具体功能包括:系统应该提供员工数据的插入、删除、更新、查询;员工基本信息查询的功能。 2 、功能简介 员工管理系统它可以有效的管理员工信息情况。具体功能有以下几个方面。基本信息的添加,修改,删除和查询。学生信息管理包括添加、查看学生列表等功能。

数据结构实验报告-串

实验四串 【实验目的】 1、掌握串的存储表示及基本操作; 2、掌握串的两种模式匹配算法:BF和KMP。 3、了解串的应用。 【实验学时】 2学时 【实验预习】 回答以下问题: 1、串和子串的定义 串的定义:串是由零个或多个任意字符组成的有限序列。 子串的定义:串中任意连续字符组成的子序列称为该串的子串。 2、串的模式匹配 串的模式匹配即子串定位是一种重要的串运算。设s和t是给定的两个串,从主串s的第start个字符开始查找等于子串t的过程称为模式匹配,如果在S中找到等于t的子串,则称匹配成功,函数返回t在s中首次出现的存储位置(或序号);否则,匹配失败,返回0。 【实验内容和要求】 1、按照要求完成程序exp4_1.c,实现串的相关操作。调试并运行如下测试数据给出运行结果: ?求“This is a boy”的串长; ?比较”abc 3”和“abcde“; 表示空格 ?比较”english”和“student“; ?比较”abc”和“abc“; ?截取串”white”,起始2,长度2; ?截取串”white”,起始1,长度7; ?截取串”white”,起始6,长度2; ?连接串”asddffgh”和”12344”; #include #include #define MAXSIZE 100 #define ERROR 0 #define OK 1 /*串的定长顺序存储表示*/

typedef struct { char data[MAXSIZE]; int length; } SqString; int strInit(SqString *s); /*初始化串*/ int strCreate(SqString *s); /*生成一个串*/ int strLength(SqString *s); /*求串的长度*/ int strCompare(SqString *s1,SqString *s2); /*两个串的比较*/ int subString(SqString *sub,SqString *s,int pos,int len); /*求子串*/ int strConcat(SqString *t,SqString *s1,SqString *s2); /*两个串的连接*/ /*初始化串*/ int strInit(SqString *s) { s->length=0; s->data[0]='\0'; return OK; }/*strInit*/ /*生成一个串*/ int strCreate(SqString *s) { printf("input string :"); gets(s->data); s->length=strlen(s->data); return OK; }/*strCreate*/ /*(1)---求串的长度*/ int strLength(SqString *s) { return s->length; }/*strLength*/ /*(2)---两个串的比较,S1>S2返回>0,s1length&&ilength;i++) { if(s1->data[i]>s2->data[i]) {

数据结构实验报告模板

2009级数据结构实验报告 实验名称:约瑟夫问题 学生姓名:李凯 班级:21班 班内序号:06 学号:09210609 日期:2010年11月5日 1.实验要求 1)功能描述:有n个人围城一个圆圈,给任意一个正整数m,从第一个人开始依次报数,数到m时则第m个人出列,重复进行,直到所有人均出列为止。请输出n个人的出列顺序。 2)输入描述:从源文件中读取。 输出描述:依次从显示屏上输出出列顺序。 2. 程序分析 1)存储结构的选择 单循环链表 2)链表的ADT定义 ADT List{ 数据对象:D={a i|a i∈ElemSet,i=1,2,3,…n,n≧0} 数据关系:R={< a i-1, a i>| a i-1 ,a i∈D,i=1,2,3,4….,n} 基本操作: ListInit(&L);//构造一个空的单链表表L ListEmpty(L); //判断单链表L是否是空表,若是,则返回1,否则返回0. ListLength(L); //求单链表L的长度 GetElem(L,i);//返回链表L中第i个数据元素的值; ListSort(LinkList&List) //单链表排序 ListClear(&L); //将单链表L中的所有元素删除,使单链表变为空表 ListDestroy(&L);//将单链表销毁 }ADT List 其他函数: 主函数; 结点类; 约瑟夫函数 2.1 存储结构

[内容要求] 1、存储结构:顺序表、单链表或其他存储结构,需要画示意图,可参考书上P59 页图2-9 2.2 关键算法分析 结点类: template class CirList;//声明单链表类 template class ListNode{//结点类定义; friend class CirList;//声明链表类LinkList为友元类; Type data;//结点的数据域; ListNode*next;//结点的指针域; public: ListNode():next(NULL){}//默认构造函数; ListNode(const Type &e):data(e),next(NULL){}//构造函数 Type & GetNodeData(){return data;}//返回结点的数据值; ListNode*GetNodePtr(){return next;}//返回结点的指针域的值; void SetNodeData(Type&e){data=e;}//设置结点的数据值; void SetNodePtr(ListNode*ptr){next=ptr;} //设置结点的指针值; }; 单循环链表类: templateclass CirList { ListNode*head;//循环链表头指针 public: CirList(){head=new ListNode();head->next=head;}//构造函数,建立带头节点的空循环链表 ~CirList(){CirListClear();delete head;}//析构函数,删除循环链表 void Clear();//将线性链表置为空表 void AddElem(Type &e);//添加元素 ListNode *GetElem(int i)const;//返回单链表第i个结点的地址 void CirListClear();//将循环链表置为空表 int Length()const;//求线性链表的长度 ListNode*ListNextElem(ListNode*p=NULL);//返回循环链表p指针指向节点的直接后继,若不输入参数,则返回头指针 ListNode*CirListRemove(ListNode*p);//在循环链表中删除p指针指向节点的直接后继,且将其地址通过函数值返回 CirList&operator=(CirList&List);//重载赋

数据结构-迷宫实验报告

云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □ 实验难度 A □ B □ C □ 承担任务 (难度为C时填写) 指导教师评分(签名) 【实验题目】 实验4.数组的表示极其应用 【问题描述】 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 【基本要求】 首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d 表示走到下一坐标的方向。如;对于下列数据的迷宫,输出的一条通路为:(l,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),…。?

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识) 本实验的目的是设计一个程序,实现手动或者自动生成一个n×m矩阵的迷宫,寻找一条从入口点到出口点的通路。我们将其简化成具体实验内容如下:选择手动或者自动生成一个n×m的迷宫,将迷宫的左上角作入口,右下角作出口,设“0”为通路,“1”为墙,即无法穿越。假设从起点出发,目的为右下角终点,可向“上、下、左、右、左上、左下、右上、右下”8个方向行走。如果迷宫可以走通,则用“■”代表“1”,用“□”代表“0”,用“→”代表行走迷宫的路径。输出迷宫原型图、迷宫路线图以及迷宫行走路径。如果迷宫为死迷宫,输出信息。 可以二维数组存储迷宫数据,用户指定入口下标和出口下标。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。? 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系) 1. 设定迷宫的抽象数据类型定义: ADT Maze { 数据对象:D = { a i, j | a i, j ∈ { ‘■’、‘□’、‘※’、‘→’、‘←’、 ‘↑’、‘↓’ } , 0≤ i≤row+1, 0≤j≤col+1, row, col≤18 } 数据关系:R = { ROW, COL } ROW = { < a i-1, j , a i, j > | a i-1, j , a i, j ∈D, i=1, … , row+1, j=0, … , col+1} COL = { < a i, j-1, a i, j > | a i, j-1 , a i, j ∈D, i=0, … , row+1, j=1, … , col+1} 基本操作: Init_hand_Maze( Maze, row, col) 初始条件:二维数组Maze[][]已存在。

Java程序设计大作业实验报告

目录 一、前言 (2) 二、需求分析 (3) 三、系统总体设计 (3) 3.1系统总体设计系统思路 (3) 3.2数据库设计 (4) 3.2.1 login1表的设计和数据 (4) 3.2.2 student表的设计和数据 (5) 3.2.3 course表的设计和数据 (5) 3.2.4 score表的设计和数据 (6) 3.3系统功能模块设计 (6) 四、系统详细设计 (7) 4.1登录模块 (7) 4.2 学生模块 (7) 4.3 教师模块 (8) 4.4 管理员模块 (8) 五、系统测试及运行结果 (9) 5.1 主界面 (9) 5.2 学生管理中心界面 (9) 5.3 教师管理中心界面 (10) 5.4 管理员管理中心界面 (10) 5.5 查询课表界面 (11) 5.6 查询成绩界面 (11) 5.7 查询教学情况界面 (11) 5.8 查询所有学生成绩界面 (12) 5.9 学生信息管理界面 (12) 5.10 学生成绩管理界面 (13) 5.11 用户管理界面 (13) 六、实验总结 (14) 七、参考文献 (14)

一、前言 随着计算机在人们生活中的普及和网络时代的来临,对信息的要求日益增加,学生信息管理业务受到了较为强烈的冲击,传统的手工管理方式传统的手工管理方式已不能适应现在的信息化社会。如何利用现有的先进计算机技术来解决学生信息管理成为当下的一个重要问题,学生信息管理系统是典型的信息管理系统,其开发主要就是针对前台的页面展示以及后台数据的管理。对于前者,要求应用程序功能完备,易于使用,界面简单;而对于后者,则要求数据库具有一致性、完整性,并能够依据前台的操作来对应操作后台数据库达到一定的安全性。 本学生信息管理系统主要采用的纯JAVA代码实现图形界面系统的开发,以及数据库知识进行数据的查询,删除,插入和更新。本系统主要分为三个部分:学生模块、教师模块、管理员模块。其中学生模块实现的功能:查询课表信息和查询成绩。教师模块实现的功能:查询课表信息、查询教学情况和查询所有学生的各科成绩。管理员模块实现的功能:课表信息的管理、学生信息管理、学生成绩管理和用户信息管理。

数据结构实验报告-答案

数据结构(C语言版) 实验报告

专业班级学号姓名 实验1 实验题目:单链表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测 试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序: (1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码: #include"" #include"" #include"" #include"" typedef struct node . . 示意图:

head head head 心得体会: 本次实验使我们对链表的实质了解更加明确了,对链表的一些基本操作也更加熟练了。另外实验指导书上给出的代码是有一些问题的,这使我们认识到实验过程中不能想当然的直接编译执行,应当在阅读并完全理解代码的基础上再执行,这才是实验的意义所在。

实验2 实验题目:二叉树操作设计和实现 实验目的: 掌握二叉树的定义、性质及存储方式,各种遍历算法。 实验要求: 采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历 的操作,求所有叶子及结点总数的操作。 实验主要步骤: 1、分析、理解程序。 2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针), 如ABD###CE##F##,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求 所有叶子及结点总数。 实验代码 #include"" #include"" #include"" #define Max 20 ertex=a; irstedge=NULL; irstedge; G->adjlist[i].firstedge=s; irstedge; R[i] 留在原位

虚拟仪器大作业实验报告

东南大学生物科学与医学工程学院 虚拟仪器实验报告 大作业 实验名称:基于MIT-BIH心率失常数据库的心电信号系统的设计专业:生物医学工程 姓名:学号: 同组人员:学号: 实验室: 综合楼716 实验时间:2013/11/28 评定成绩:审阅教师:

目录 一.实验目的 二.实验内容 基于MIT-BIH心率失常数据库的心电信号系统的设计 1.实验要求和说明 2.程序设计流程图 3.程序各版块介绍说明 4.前面板的设计 5.调试过程 6.结果及分析 三.实验收获及小结 四.参考文献

一.实验目的 现代医学表明,心电信号(ECG)含有临床诊断心血管疾病的大量信息,ECG的检测与分析在临床诊断中具有重要价值,是了解心脏的功能与状况、辅助诊断心血管疾病、评估各种治疗方法有效性的重要手段。 本次大作业利用具有直观图形化编程和强大数字信号处理功能的虚拟仪器编程语言LabVIEW作为开发平台,设计一个基于虚拟仪器的简单心电信号分析系统,该系统具有心电信号的读取,处理分析,波形显示、心率显示及报警,波形存储和回放等功能。 二.实验内容 1.实验内容及要求 基于MIT-BIH心率失常数据库的心电信号系统的设计 1. 本次大作业所用原始信号是从MIT-BIH(Massachusettes Institute of and Beth Israel Hospital,美国麻省理工学院和波士顿贝丝以色列医院)心率数据库(https://www.360docs.net/doc/0e16121037.html,/physiobank/database/mitdb/)中选取心电信号作为实验分析的数据。设计的系统要求对原始心电信号进行读取、绘制出其时域波形,利用原始心电数据中的时间数据控制显示时间,并具有保存回放功能,同时具有心率过快或过缓报警提示功能。 2. 心电信号是微弱低频生理电信号,通常频率在0.05Hz~100Hz,幅值不超过 4mV,它通过安装在皮肤表面的电极来拾取。由于实际检测工况的非理想,在ECG 信号的采集过程中往往会受到工频噪声及电极极化等各种随机噪声的影响。噪声的存在降低了诊断的准确性。其中影响最大的是工频干扰和基线漂移噪声。因此,在ECG 信号检测过程中,如何抑制工频干扰和基线漂移等是必须解决的问题。要求选择并设计合适的滤波器,除去所给心电信号的工频干扰和基线漂移。 3. 检测心率:检测信号心电的R波,计算平均心率和实时心率(R-R波时间间隔 的倒数),并显示实时心率和平均心率。 4. 对任一路心电信号滤波前后的信号进行时域分析和频谱分析,分别显示出结 果。

数据结构之迷宫找到路径实验报告

实验报告 课程名:数据结构(C语言版)实验名:迷宫问题I 姓名: 班级: 学号: 撰写时间:2014/10/05

一实验目的与要求 1. 了解栈的应用 2. 利用栈在迷宫中找到一条路 二实验内容 ?一个迷宫如图1所示, 是由若干个方格构成的一个矩形, 其中有唯一的一个入口(用标示), 有唯一的一个出口(用△标示). 图中深色的方格无法到达, 浅色的方格都是可以到达的. 每一次只能从当前方格前进到与当前方格有公共边的方格中(因此前进方向最多有四个). ?本次实验的迷宫问题要求求解一条从入口到出口的路. 图1:迷宫 三实验结果与分析 程序: #include #include /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int Maze(int ox,int oy,int ex,int ey,int rnum,int cnum,int a[rnum][cnum]){ int b[rnum][cnum]; int i,j,Znum=0; for(i=0;i

} } int Sx[Znum+1], Sy[Znum+1], p=0; for(i=0;i0){ if(Sx[p-1]==ex && Sy[p-1]==ey){ brand = 1; break; } else{ int tb = -1; for(i=1;i<4;++i){ int tx = Sx[p-1]+dx[i]; int ty = Sy[p-1]+dy[i]; if(b[tx][ty]==0){ tb = 1; Sx[p]=tx; Sy[p]=ty; b[tx][ty]=2; p=p+1; } } if(tb<0){ b[Sx[p-1]][Sy[p-1]]=-1; p=p-1; } } } if(brand>0){ while(p>0){ printf("(%d,%d), ",Sx[p-1],Sy[p-1]); p=p-1; }

相关文档
最新文档