数据结构实验指导

2024-04-22

数据结构实验指导(通用6篇)

篇1:数据结构实验指导

实验五 查找算法

实验项目:必做:顺序查找、折半查找

选做:二叉查找树 实验类型: 验证性 实验内容:

顺序查找:用数组或链表实现,数据有序或无序均可; 折半查找:必须用数组实现,且数据有序;

注意:提交的实验报告要显示已有的数据元素、待查找的数据;应包含查找成功、不成功的情况。

篇2:数据结构实验指导

南京工程学院

信息管理与信息系统教研室

2014年3月

实验一 线性表操作

一、实验目的

1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。2.掌握线性表的顺序存储结构的定义及C语言实现。

3.掌握线性表的链式存储结构——单链表的定义及C语言实现。4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。5.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验内容

1.顺序线性表的建立、插入及删除。

2.链式线性表的建立、插入及删除。

三、实验步骤

1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。

3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。

四、实现提示

1.由于C语言的数组类型也有随机存取的特点,一维数组的机内表示就是顺序结构。因此,可用C语言的一维数组实现线性表的顺序存储。

在此,我们利用C语言的结构体类型定义顺序表: #define MAXSIZE 1024 typedef int elemtype;/* 线性表中存放整型元素 */ typedef struct { elemtype vec[MAXSIZE];int len;/* 顺序表的长度 */ }sequenlist;将此结构定义放在一个头文件sqlist.h里,可避免在后面的参考程序中代码重复书写,另外在该头文件里给出顺序表的建立及常量的定义。

2.注意如何取到第i个元素,在插入过程中注意溢出情况以及数组的下标与位序(顺序表中元素的次序)的区别。

3.单链表的结点结构除数据域外,还含有一个指针域。用C语言描述结点结构如下:

typedef int elemtype;typedef struct node { elemtype data;//数据域

struct node *next;//指针域

}linklist;注意结点的建立方法及构造新结点时指针的变化。构造一个结点需用到C语言的标准函数malloc(),如给指针变量p分配一个结点的地址:

p=(linklist *)malloc(sizeof(linklist));该语句的功能是申请分配一个类型为linklist的结点的地址空间,并将首地址存入指针变量p 中。当结点不需要时可以用标准函数free(p)释放结点存储空间,这时p为空值(NULL)。

五、思考与提高

1.如果按由表尾至表头的次序输入数据元素,应如何建立顺序表。2.在main函数里如果去掉L=&a语句,会出现什么结果?

实验二

栈和队列的应用

一、实验目的

1.掌握栈的顺序表示和实现 2.掌握队列的链式表示和实现

二、实验内容

1.编写一个程序实现顺序栈的各种基本运算。2.实现队列的链式表示和实现。

三、实验步骤

1.顺序栈(1)初始化顺序栈;(2)插入元素(3)删除栈顶元素(4)取栈顶元素(5)遍历顺序栈(6)置空顺序栈 2.链队列

(1)初始化并建立链队列(2.)入链队列(3)出链队列(4)遍历链队列

四、实现提示

1./*定义顺序栈的存储结构*/ typedef struct { ElemType stack[MAXNUM];int top;}SqStack;

/*初始化顺序栈函数*/ void InitStack(SqStack *p)

{q=(SqStack*)malloc(sizeof(SqStack));/*申请空间*/} /*入栈函数*/ void Push(SqStack *p,ElemType x){if(p->toptop=p->top+1;/*栈顶+1*/ p->stack[p->top]=x;} /*数据入栈*/ } /*出栈函数*/ ElemType Pop(SqStack *p){x=p->stack[p->top];/*将栈顶元素赋给x*/ p->top=p->top-1;} /*栈顶-1*/ /*获取栈顶元素函数*/ ElemType GetTop(SqStack *p){ x=p->stack[p->top];} /*遍历顺序栈函数*/ void OutStack(SqStack *p){ for(i=p->top;i>=0;i--)printf(“第%d个数据元素是:%6dn”,i,p->stack[i]);} /*置空顺序栈函数*/ void setEmpty(SqStack *p){ p->top=-1;} 可参考代码: #include “stdio.h” #define StackSize 100 typedef int ElemType;main(){

SqStack S;

ElemType e;

int N;

/*初始化顺序栈*/ /*入栈*/ /*出栈*/ /*遍历顺序栈*/ getch();}

2./*定义链队列*/ typedef struct Qnode { ElemType data;struct Qnode *next;}Qnodetype;typedef struct { Qnodetype *front;Qnodetype *rear;}Lqueue;

/*初始化并建立链队列函数*/ void creat(Lqueue *q)

{ h=(Qnodetype*)malloc(sizeof(Qnodetype));/*初始化申请空间*/ h->next=NULL;q->front=h;q->rear=h;for(i=1;i<=n;i++)*利用循环快速输入数据*/ { scanf(“%d”,&x);Lappend(q,x);} /*利用入链队列函数快速输入数据*/ } /*入链队列函数*/ void Lappend(Lqueue *q,int x){ s->data=x;s->next=NULL;q->rear->next=s;q->rear=s;} /*出链队列函数*/ ElemType Ldelete(Lqueue *q){ p=q->front->next;q->front->next=p->next;if(p->next==NULL)q->rear=q->front;x=p->data;free(p);} /*释放空间*/ /*遍历链队列函数*/ void display(Lqueue *q){ while(p!=NULL)/*利用条件判断是否到队尾*/ { printf(“%d-->”,p->data);p=p->next;} } 可参考如下代码: #include “stdio.h” #define MaxSize 100 typedef int ElemType;main(){

LinkQueue Q;

ElemType e;

/*初始化并建立链队列*/

/*入链队列*/ /*出链队列*/

*遍历链队列*/

}

DestoryQueue(&Q);

getch();}

五、思考与提高

1.读栈顶元素的算法与退栈顶元素的算法有何区别? 试写一个算法,判别读入的一个以‘@’为结束符的字符序列是否是‚回文‛。实验三 树操作

一、实验目的

1.通过实验,掌握二叉树的建立与存储 2.通过实验,掌握二叉树的遍历方法

二、实验内容

1.练习二叉树的建立与存储 2.练习二叉树的遍历

三、实验步骤

1.建立二叉链表的结构描述、二叉树的建立、二叉树的先序、中序与后序遍历算法。

2.建立二叉树,并通过调用函数, 输出先序遍历、中序遍历与后序遍历的结果。

四、实现提示

1.采用递归方法建立二叉树:

首先建立二叉树的根 结点,然后建立其左右子树,直到空子树为止。

2.先序遍历、中序遍历与后序遍历二叉树。#include #include typedef int Status;typedef char ElemType;typedef struct BiTNode { ElemType data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;/*建立二叉树*/

BiTree CreateBiTree(BiTree &T){ } /*先序遍历*/ Status PreOrderTraverse(BiTree T){ } /*中序遍历*/ Status InOrderTraverse(BiTree T){ } /*后序遍历*/ Status PostOrderTraverse(BiTree T){ }

int main(){ BiTree T;CreateBiTree(T);PreOrderTraverse(T);printf(“n”);/*先序遍历*/ InOrderTraverse(T);printf(“n”);/*中序遍历*/ PostOrderTraverse(T);printf(“n”);/*后序遍历*/

return 0;}

五、思考与提高

篇3:指导学生学会分析实验数据

一、运用表格整理,指导学生发现数据呈现的规律

在收集各种数据时,教师应引导学生明白,数据的本身并没有意义,重要的是数据所给予的启示。特级教师路培琦曾说过:“科学课既强调学生亲历探究的过程,还重视在实验过程中搜集和积累数据,强调对事物的认识,不仅要在质上认识,更要从量的分析中得出结论。”学生收集、记录实验数据完成后,教师指导学生对实验数据进行重新整理和分析,使原本无序、杂乱的数据变得有序,不但能帮助学生深入挖掘数据背后隐藏的规律,为学生更好地总结、归纳概括科学规律提供依据和建议,也有利于发挥数据应有的作用,对现象作出客观的解释,学会从各种数据中选择有效的数据并把数据转化为证据。

在教学《豌豆荚里的豌豆》一课时,学生收集的40个豌豆夹里的豌豆粒数如下:4、5、3、1、4、5、7、6、4、6、8、4、6、3、4、6、5、7、5、4、6、7、4、5、6、3、0、2、5、5、6、6、7、9、5、5、6、5、6、5。这些数据很真实地记录了每个豌豆荚里的豌豆粒数,但是很杂乱无章,很难发现碗豆荚里种子粒数的分布规律。在学生完成搜集数据之后,教师指导学生运用表格对这些数据进行整理和分析。如下表:

学生对表格中的数据进行分析如下:

生:我发现了5粒的最多。

生:我发现了没有种子的只有1个。

生:我发现一个碗豆荚里种子最多有8个。

生:我发现8粒和1粒的各有一个,而9粒和9粒以上的都没有。

生:大多数都在4~6粒种子之间。

师:豌豆荚里的豌豆种子数是多少?怎样回答比较合理?哪一些种子数量比较多一些?

生:4粒、5粒、6粒。在4~6个之间的数量比较多。

这样,原本无序的数据变得清晰有序,学生很轻松地发现豌豆种子粒数分布的大致规律。虽然不能确切地说出碗豆荚里的种子数,但在整理分析后,得到了一个合理的推论,更重要的是培养了学生实事求是的科学态度,增强了学生对数据的敏感性。这一过程,将潜移默化地影响着学生的科学学习,对于学生探究事物的内在规律将起到至关重要的作用。

二、运用直观图表,指导学生发现数据之间的变化规律

将实验数据按一定规律用直观图表的方式表达出来是记录和处理实验数据最常用的方法。图表设计要求对应关系清楚、简单明了、有利于发现相关数据之间的关系。对于一般比较简单的探究问题,学生通过对统计得到的数据进行分析就可以发现事物内在规律,而一些稍复杂的内容,光看数据就不那么容易了,通过统计图、分布图等图表的运用,能直观反映出数据之间的联系,有利于学生发现数据背后蕴含的规律。

如在六年级《抵抗弯曲》一课的教学中,学生通过实验获得了一组关于纸的厚度与所承受垫圈数量的数据。这些实验数据比较抽象,教师引导学生利用这组数据制作出一份曲线图,使抽象的数变为直观,很容易建立数据之间的联系,发现其中的规律。

学生根据纸的厚度与所承受垫圈的数据完成的统计图如下:

折线统计图更直观有效地反映了纸的厚度与抵抗弯曲能力之间的关系。统计图让学生充分认识到:随着纸的厚度的增加,承受垫圈的个数大大增加,抵抗弯曲的能力也显著增强。通过运用直观图表的方法,让学生更形象、更容易地找到了事物变化的规律。

三、运用纵横比较,指导学生建立实验数据的联系

在小学科学教材中,有许多实验得到的数据是具有高度明晰、数据内在高度规律化的,此时学生很容易从数据上轻而易举地解释现象,并从现象中概括结论。有的教师此时往往就此满足,未能开展学生数据分析方法的提炼,学生因此失去形成数据分析方法的理性思考机会,以后在遇到较为复杂的数据时就表现为茫然失措,不知从何入手。如果教师引领学生对通过实验得到的数据进行纵横比较,很容易发现实验数据之间的变化规律,建立不同实验数据之间的联系,提升实验数据分析的有效性。教师引领学生进行数据分析,可以采用横向比较、纵向比较、同一类纵向比、不同类横向比等等,学生自然就会对数据分析具有了一定的分析策略,数据分析能力将会有较大的提高。

如一位科学教师执教教科版六年级上册《形状与结构》单元的《抵抗弯曲》一课时,教材引领学生用对比实验的方法研究梁的抗弯曲能力与其宽度、厚度之间的关系。学生得到的实验数据如下:(单位为1角钱硬币的重量)

在两个实验中,改变宽度和厚度都要成倍地改变,很容易看出实验数据变化的规律。学生可以发现:纸的宽度增加,抗弯曲能力会增强;纸的厚度增加,抗弯曲能力会大大增强。这位教师没有就此收场,而是引领学生把增加纸的宽度和厚度所收集的实验数据进行纵横比较,把两个实验进行沟通,架构了两个实验之间的联系,很容易发现实验数据之间的规律。学生会发现:要增强抗弯曲的能力,增加厚度比增加宽度更加有效。这样提升了学生的实验数据分析能力,促进了学生思维的深刻性。

四、通过差异比较,引领学生把数据分析推向深刻

学生在探究活动中会得到大量的数据。这些数据间的差异是客观存在的,有时是不可靠的,甚至是错误的。科学教师不应该回避这些差异,而应积极面对,正确对待学生实验数据的差异,必要时引领学生重复实验,以期得到可靠的且具有一定信度的数据,增强学生对数据的敏感性,培养学生严谨细致、认真负责的科学态度,使学生的数据意识在处理这些数据时得以培养,能自觉地学会用数据来描述事物或对一些现象进行解释。学生数据分析能力虽然可以从高度明晰化的数据分析中逐渐得到提升,但是更大的提升来源于对于数据差异的分析,而且在数据差异处把数据分析引向深刻,促使学生返回去审视自己实验操作的科学性和正确性、审视实验器材的合理性与科学性、审视实验进程先后顺序的科学性等等,对于提高学生今后实验开展的严谨性、自我审视能力等都会起到很大的作用。

如,在研究纸的宽度与抵抗弯曲的能力之间的关系时,统计学生的实验数据如下(单位为1个垫圈的重量):

教师指导学生通过比较,先观察比较第1组学生的数据,发现:随着纸的宽度增加,抵抗弯曲的能力也随着增加。教师引领学生比较这4组的数据,发现第4组的4倍宽的纸承重32个垫圈的重量,远远超过了其他三个小组的数据。教师没有放弃这个差异,而是引领学生共同探讨这一组为什么出现了这么大的差异。下面是这一环节的教学:

师:请第4组的同学把这张纸拿到前面来。展示给大家看看。

学生把这张4倍宽的纸展示给大家。

师:为什么他们的纸能承受的垫圈数比你们的多这么多?他这组的纸和你们小组的有什么区别?

生:他们的纸有折痕。

生:他们的纸有点像半圆形,我们的纸是平的。

生:他们纸的边都折起来,有点像工字形。我觉得纸的形状也能增强抵抗弯曲的能力。

……

师:纸的形状与抵抗弯曲的能力到底有没有关系?我们下节课再研究。

对于这个与其他组相比差异很大的实验数据,教师没有回避,没有放弃,而是组织学生进行研讨。学生通过研讨,发现了纸的形状也与抵抗弯曲的能力有关这一值得研究的问题,恰恰是下一课需要研究的问题。本节课虽然没有研究,却给学生下一阶段的学习埋下了伏笔,使学生产生了进一步探究的欲望,这不正是我们科学课所期待的吗?

五、培养数据意识,提高学生的分析能力

实验数据展示在学生面前时,学生不一定马上能从数据表或图中找到规律,教师应引导学生重视实验数据,指导学生选用适当的方法进行分析数据,培养学生分析数据的能力和习惯。这一过程是十分重要的。教师可以从以下几方面入手:

教师自己要关注数据。教师可以借助放大的数据统计表或者运用多媒体把实验数据放大进行展示,通过问题的设置来引领学生关注数据、分析数据、探寻规律。在整理数据的基础上,指导学生一步步分析数据,给学生提供训练分析实验数据的机会,使学生养成分析数据的习惯。

在教学中,教师应当有意识地要求学生从实验数据出发,通过分析思考,运用数学工具得出规律性结论。这样做不仅能使学生加深对科学规律的总结过程和本质内涵的理解,并且有助于培养学生分析实验数据的能力,使学生经历由数据推出结果的过程。

在分析实验数据时,教师应引导学生像数学解题那样,要说出整个数据分析思考的过程,学会选用合适的方法进行表达。长此以往,学生的表达能力会不断提升,同时也促进学生思维能力的提升。

篇4:如何加强学生实验指导

关键词:化学 实验 指导 能力

化学是一门以实验为基础的学科,实验教学是传授知识的方法,也是培养学生动手能力的有效手段。因此化学实验是化学教学过程中不可缺少的重要环节,若只侧重于对课堂理论的验证,强调循序渐进,则使学生处于被动接受状态,加之受课堂教学理论的干扰,对实验现象、结果不加科学分析,甚至改动数据以吻合课堂理论的观点,因此,我们在化学实验的教学中以培养学生的能力为主、验证理论为辅,达到了有效地开发学生的能力的实验目标。

化学实验质量高低对学生掌握化学科学具有十分重要的意义。现在医药学各专业的学生在化学教学中,实验所占的比例逐渐增多,充分说明了实验在化学教学中的重要性,为此,本文就如何指导学生实验,提高实验效果,充分挖掘学生实验的潜力,培养学生的能力等方面作了一些探索。

一、指導学生预习实验

预习实验是学生实验成功的前提和基础,是实验教学的重要组成部分。每次学生实验前,教师要指导学生进行预习。要求学生认真阅读实验内容,明确实验目的,了解实验步骤、操作过程和实验时应注意的事项,写好预习笔记即填写好实验预习单。参照预习单做实验便于克服学生看书做实验慢的陋习,使之集中精力做好实验。通过上述活动,使学生了解实验应该做些什么?可能会出现什么问题?做到心中有数,克服盲目性和被动性,培养学生对知识的归纳、整理、统摄能力,养成严肃认真的科学态度。因此,做好学生预习实验指导,是一项十分重要的工作,不容忽视。

二、指导学生做实验

实验时要求学生做到如下几点:(1)认真操作,细心观察现象,并及时地、如实地记录实验结果;(2)严格遵守实验室的规章,实验过程保持肃静,切莫把实验课当儿戏;(3)实验中要节约药品,爱惜仪器,实验结束后必须把仪器放置好,试管等洗涤干净,以保证实验能有条不紊地进行。学生实验是以基本理论、基础知识为前提,应用前人的知识来重新验证,属于验证性实验。教师在学生实验之前应强调操作的关键步骤和注意事项,一些操作比较困难的步骤,教师可以适当演示,这样可以提高学生实验的成功率,激发学生对实验的兴趣。在学生实验过程中要加强巡回指导,发现不规范的操作要及时纠正。对于操作能力较差的学生给予具体的帮助,使其树立信心,尽快掌握规范的操作技能。验证性实验可以加强对所学理论知识的巩固,加深对物质性质的认识,增强学生的记忆力。另外,为了使学生实验有更多的收获,学生进实验室做实验先检查预习单,无预习单不能做实验。

三、指导学生观察实验现象

要有目的、有计划、有步骤地指导学生观察实验现象。要求学生观察实验变化的每一细微处并加以记录,对实验中出现的一些现象,引导学生自己观察和思考找出答案。在实验教学中用这种形式来解答学生的问题,既能激发学生的兴趣,又能培养学生的思维能力,训练学生的观察能力。

要做到观察认真、仔细,要有侧重,不被实验的表面现象所迷惑,从观察中探索实验的本质。如:为了验证松节油和溴水能发生加成反应,要求指导学生观察:①溴水是否褪色。②是否有新物质生成。③生成新物质的颜色、状态、水溶性。

如果教师对观察实验现象不加以指导,那么学生观察到的只是溴水褪色,至于生成物的颜色、状态、水溶性就容易被忽略,而化学变化的本质却是有新物质生成。因此,引导学生观察实验现象,可以提高实验教学的质量,有利于培养学生的观察能力,思维能力。

四、指导学生思考,分析实验现象

一个实验究竟会得到什么结论?学生往往并不全知道。只有对实验现象全部记录进行思考和分析,才能得出结论。通过自己的观察、探索、分析实验提供的信息,然后去粗存精,去伪存真,由此及彼,由表及里,透过现象看本质,将获得的感性知识上升到理性知识,进而转化为理论知识,提高自身的素质。对于实验中出现与理论不符合的现象,要引导学生找出原因,分析结果。也可以作为讨论题让大家发表意见和见解,以达到解决问题的目的。

另外,实验做完的当天学生必须写好实验报告,统一交授课教师。实验报告是学生学习化学实验中不可疏漏的重要环节,实验是运用理论知识指导实践,写实验报告则是将实验结果升华为理性认识,是对实验作全面的总结。在实验报告中强调对实验问题的讨论,并把它作为衡量实验报告质量的一个重要标准,使学生在实验过程中积极主动的去观察,并通过思考在实践中提高解决问题的能力,这样就使学生的智力培养和开发贯穿于整个实验教学过程中。

通过写实验报告不仅可以使学生巩固加深基础知识和实验操作,而且可以培养学生分析问题、解决问题的能力。

五、引导学生自己动手设计实验

验证性实验是学生单纯的模仿和重复前人的实验,长期“照方抓药”会使学生感到乏味,甚至挫伤学生 做实验的积极性。因此,在教学中,教师可以尝试性地将验证性实验改成由学生思考,自己设计、操作的实验,收到了良好的效果。通过这种方法能极大地提高学生做实验的兴趣和参与意识,这不仅促进了学生对理论知识的加深巩固,同时又给学生一个创新的天地,可以大大激发学生学习化学的积极性。

具体的方法是:先由学生将自己设计的实验计划上报教师,经教师审核许可后,方能进行,对学生自行 设计和动手操作的实验,教师首先予以肯定,并给予一定的加分鼓励。至于实验结果如何,实验成功与否,教师都应该给予热情的支持。学生的智慧是无限的,只要教师加以积极的引导,为学生创造自己动手设计实验的机会。

六、实行实验考核、培养实用人才

实验考核首先要强调实验课的重要性,实验考核的方法和要求,讲明理论成绩与实验成绩的比例。目的是让学生重视平时实验操作训练。为此,在实验教学结束前一周就要拿出实验考试方案。实验试题根据教学大纲拟定,题目由学生抽签而定,由学生自己准备试题,并要求在规定时间内完成,每组由教师和实验老师负责监考和评分。

七、小结

篇5:数据结构实验指导书

信息工程学院计算机系

实验一 线性表实验

实验目的

熟悉线性表的基本运算在顺序存储结构和链式存储结构上的实现,其中重点熟悉链表的各种操作。时间要求:4学时 问题描述:

约瑟夫(Joseph)问题的一种描述是:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码〈正整数〉,一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。基本要求: 利用单向循环链表存储结构模拟此过程,按照出列的顺序打印出各人的编号。

实现提示:

程序运行后首先要求用户指定初始报数上限值,然后读取各人的密码(小于30)。

选作内容:

在顺序存储结构上实现上述问题的操作。

Input 输入包括两行,第一行包括报数上限值m和人数n,第二行为n个人的密码,所有数据之间由空格分隔。Output 输出一行,共n个整数,表示各编号人的出列顺序。各数之间由空格分隔。Sample Input 20 7 3 1 7 2 4 8 4 Sample Output 6 1 4 7 2 3 5 2

实验二 栈和队列实验

实验目的

熟悉栈和队列的基本特性,掌握栈和队列基本运算的实现过程。时间要求:4+4学时 问题描述:

设停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出,汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等候, 一旦有车开走,则排在便道上的第一辆车即可开入,当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用,当便道上汽车要离开时,排在它前面的汽车要先开走让路,然后再依次排到队尾,并且在便道上停车不收费。试为停车场编制按上述要求进行管理的模拟程序。

基本要求:

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列管理,每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时间,对每一组输入数据进行操作后的输出数据为: 若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便递上停留的时间不收费),栈以顺序结构实现,队列以链表结构实现。实现提示:

需另设一栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含有两个数据项:汽车牌照号码和进入停车场的时间。选作内容:

(1)两个栈共享空间,思考应开辟数组的空间是多少 ?(2)汽车可有不同种类,则它们的占地面积不同,收费标准也不同,如 1 辆客车和 1.5 辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这神要求。Input 输入第一行,包括两个数据,第一个整数为停车场最多可停放车辆数,第二个浮点数表示单位时间的停车费用。接下来有多行数据,每行有三个整数,第一个为0或1,0表示进 入车场,1表示离开车场;第二个整数为车号;第三个整数为进入或离开的时间。当一行中三个数均为0时表示输入结束,所有数据之间由空格分隔。Output 输出为三部分,第一部分为按离开停车场顺序打印出的各车费用,每车一行,包括车号和费用(保留小数点后两位)。第二部分占一行为当前停车场中的所有车辆,从北到南顺序输出各车车号。第三部分占一行为当前便道上的所有车辆,从前向后顺序输出各车车号。各车号之间由一个空格分隔。Sample Input 2 1.5 0 1 5 0 2 10 1 1 15 0 3 20 0 4 25 0 5 30 0 6 35 1 2 40 0 7 45 1 6 50 0 0 0 Sample Output 1 15.00 2 45.00 3 4 7 5 4

实验三 哈夫曼树实验

实验目的

熟悉非线性结构的特点 , 掌握非线性结构的存储方式及各种操作的实现方法,同时对自顶向下的程序设计方法、应用程序界面的设计、非线性结构的文件存储方法等方面的辑程技术进行训练。时间要求:4+4学时 问题描述:

利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统,试为这样的信息收发站写一个哈夫曼编译码系统。

基本要求:

一个完整的系统应具有以下功能:

(1)I: 初始化。从终端读入字符集大小 n,及 n 个字符和 n 个权值,建立哈夫曼树,并将其存于文件hfmtree中。

(2)C: 编码。利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。

(3)D: 译码。利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中。

(4)P: 打印代码文件。将文件codefi1e以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件codeprint中。

(5)T:打印哈夫曼树。将已在内存中的哈夫曼树以直观的方式(树或凹凸表形式)显示在屏幕上,同时将此字符形式的哈夫曼树写入文件treeprint中。

实现提示:

(1)用户界面可以设计为“菜单”方式:显示上述功能号,再加上“E”表示结束运性行结束,用户键入一个选择功能字符,则执行相应的功能,此功能执行完毕后再显示此菜单,直至用户选择了“E”为止。

(1)在程序的一次执行过程中,第一次执行了I、D 或 C 命令之后,哈夫曼树已经在内存中存在了,不必再读入。每次执行中不一定执行 I 命令,因为文件 hfmtree 可能早已建好。

选作内容:

(1)修改你的系统,使系统实现对自身源程序的编码和译码(注意特殊符号的编/译码问题)。

(2)实现各个转换操作的源/目的文件均由用户自己指定。

实验四 图的搜索实验

实验目的

熟悉图的相关操作,掌握图的搜索算法及其应用,同时进一步练习栈与队列在实际问题中的应用。时间要求:4+4学时 问题描述:

一只老鼠走进了一个迷宫,这个迷宫是由M行N列(如:10行8列)的方格构成的,相邻方格之间可能是相通的,也可能有墙相隔,各方格位置由其对应坐标确定,如图所示。迷宫在(1,1)处有一个入口,在(M,N)处有一个出口,在入口和出口之间有通路相通。问题是让你帮助老鼠找出从入口到出口的一条最短路径。

00001000 11001010 00010000 00001010 10100000 00111011 10001000 基本要求:

为老鼠找出一条从入口到出口的最短路径。实现提示:

1、迷宫用数组表示,1代表是墙走不通,0表示可以通行。边界可以扩充为墙,即M×N迷宫用(M+2)×(N+2)数组表示。

2、向4个方向前进时的位移量可以用以下数组表示,处理时方便。

int move[4][2]={ {0,1},{1,0},{0,-1},{-1,0} };

3、采用图的广度优先搜索算法。选作内容:

对给定的迷宫,统计出共有多少条不同的路径。

实验五 排序实验

实验目的

熟练掌握各种排序算法的实现方法,以及不同算法的特点,掌握各种排序方法的时间效率。

时间要求:4+4学时 问题描述:

各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。对一组给定的数据,设计出各不同排序算法对其进行排序,给出各算法在排序中的关键字比较次数和关键字移动次数,以取得直观感受。基本要求:

(1)对以下各排序算法进行比较:直接插入排序、冒泡排序、快速排序、简单选择排序、归并排序。

(2)待排序表的表长为100;一共有n组不同的数据,对每组数据用以上各排序方法进行排序,比较的指标为有关键字参加的比较次数和关键字的移动次数。实现提示:

在算法的适当地方加入计数操作,计算关键字的比较次数和移动次数。选作内容:

对算法的稳定性作验证。

Input 输入部分第一行为待排关键字的组数n,接下来为n行待排关键字,第行有100个整数所有数据之间由空格分隔。Output 输出共n行,每行共有10个整数,表示5种排序方法排序的关键字比较次数和移动次数,即为:直接插入排序比较次数 直接插入排序移动次数 冒泡排序比较次数 冒泡排序移动次数 快速排序比较次数、快速排序移动次数 简单选择排序比较次数、简单选择排序移动次数 归并排序比较次数 归并排序移动次数(下例待排关键字为5,实际提交测试数据为100)Sample Input 3 1 2 3 4 5 5 4 3 2 1 4 2 5 1 3 Sample Output 4 0 4 0 10 16 10 0 7 12 14 18 10 30 12 16 10 6 5 12 10 12 10 18 11 14 10 6 7 12

数据结构实验报告

实验一 线性表实验

班级:____________ 姓名:____________ 学号:____________

实验目的:

熟悉线性表的基本运算在顺序存储结构和链式存储结构上的实现,其中重点掌握线性表的链式表示时各种操作的实现。问题描述:

约瑟夫(Joseph)问题的一种描述是:编号为1,2,3,„,n的n个人按顺时针方向围坐一圈,每人持有一个密码〈正整数〉,一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。

需求分析:(包括对问题的理解,解决问题的策略、方法描述)

系统设计:(包括数据结构定义、抽象出基本操作描述、主程序模块处理过程描述)

调试分析:(包括调试过程中对原设计的修改,以及遇到的问题和解决的方法)

测试结果:(输入的测试数据及运行结果、正确性、在线测试情况)

基本操作的实现:(对各基本操作实现的描述)

数据结构实验报告

实验二 栈和队列实验

班级:____________ 姓名:____________ 学号:____________

实验目的:

熟悉栈和队列的基本特性,掌握栈和队列基本运算的实现过程。重点掌握栈和队列各种操作的实现。问题描述:

设停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出,汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等候, 一旦有车开走,则排在便道上的第一辆车即可开入,当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用,试为停车场编制按上述要求进行管理的模拟程序。

需求分析:(包括对问题的理解,解决问题的策略、方法描述)

系统设计:(包括数据结构定义、抽象出基本操作描述、主程序模块处理过程描述)

调试分析:(包括调试过程中对原设计的修改,以及遇到的问题和解决的方法)

测试结果:(输入的测试数据及运行结果、正确性、在线测试情况)

基本操作的实现:(对各基本操作实现的描述)

数据结构实验报告

实验三 哈夫曼树实验

班级:____________ 姓名:____________ 学号:____________

实验目的:

熟悉非线性结构的特点 , 掌握非线性结构的存储方式及各种操作的实现方法,同时对自顶向下的程序设计方法、应用程序界面的设计、非线性结构的文件存储方法等方面的辑程技术进行训练。问题描述:

利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统,试为这样的信息收发站写一个哈夫曼编译码系统。基本要求:

一个完整的系统应具有以下功能:

(1)I: 初始化。从终端读入字符集大小 n,及 n 个字符和 n 个权值,建立哈夫曼树,并将其存于文件hfmtree中。

(2)C: 编码。利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。

(3)D: 译码。利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中。

(4)P: 打印代码文件。将文件codefi1e以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件codeprint中。

(5)T:打印哈夫曼树。将已在内存中的哈夫曼树以直观的方式(树或凹凸表形式)显示在屏幕上,同时将此字符形式的哈夫曼树写入文件treeprint中。

需求分析:(包括对问题的理解,解决问题的策略、方法描述)

系统设计:(包括数据结构定义、抽象出基本操作描述、主程序模块处理过程描述)

调试分析:(包括调试过程中对原设计的修改,以及遇到的问题和解决的方法)

测试结果:(输入的测试数据及运行结果、正确性、在线测试情况)

基本操作的实现:(对各基本操作实现的描述)(后面可加页)

数据结构实验报告

实验四 图搜索实验

班级:____________ 姓名:____________ 学号:____________

实验目的:

熟悉图的相关操作,掌握图的搜索算法及其应用,同时进一步练习栈与队列在实际问题中的应用。问题描述:

一只老鼠走进了一个迷宫,这个迷宫是由M行N列(如:10行8列)的方格构成的,相邻方格之间可能是相通的,也可能有墙相隔,各方格位置由其对应坐标确定,如图所示。迷宫在(1,1)处有一个入口,在(M,N)处有一个出口,在入口和出口之间有通路相通。问题是让你帮助老鼠找出从入口到出口的一条最短路径。基本要求:

为老鼠找出一条从入口到出口的最短路径。

需求分析:(包括对问题的理解,解决问题的策略、方法描述)

系统设计:(包括数据结构定义、抽象出基本操作描述、主程序模块处理过程描述)

调试分析:(包括调试过程中对原设计的修改,以及遇到的问题和解决的方法)

测试结果:(输入的测试数据及运行结果、正确性、在线测试情况)

基本操作的实现:(对各基本操作实现的描述)(后面可加页)

数据结构实验报告

实验五 排序实验

班级:____________ 姓名:____________ 学号:____________

实验目的

熟练掌握各种排序算法的实现方法,以及不同算法的特点,掌握各种排序方法的时间效率。

时间要求:4+4学时 问题描述:

各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。对一组给定的数据,设计出各不同排序算法对其进行排序,给出各算法在排序中的关键字比较次数和关键字移动次数,以取得直观感受。

需求分析:(包括对问题的理解,解决问题的策略、方法描述)

系统设计:(包括数据结构定义、抽象出基本操作描述、主程序模块处理过程描述)

调试分析:(包括调试过程中对原设计的修改,以及遇到的问题和解决的方法)

测试结果:(输入的测试数据及运行结果、正确性、在线测试情况)

篇6:软件体系结构实验指导书

实验一

系统的用例模型

实验名称:系统的用例模型

实验类型: 设计性实验 学

时:2课时

一、实验目的

1.熟悉用例图的基本功能和使用方法。

2.锻炼结合给定题目,进行有效需求分析的能力。3.掌握如何使用建模工具绘制用例图的方法。

二、实验器材

1.计算机一台。

2.UML建模工具,比如软件ArgoUML,Rational Rose 或StarUML。

三、实验内容

在理解用例图的基本功能和使用方法的基础上,结合具体问题,完成对系统的需求建模,得到用例模型后,应针对每个用例进行业务分析,说明其具体的业务流程。用Rational Rose或StarUML工具软件绘制系统的用例图。下文以Rational Rose为例讲解基本步骤。

四、实验步骤

1.结合实际给定题目,完成系统的需求建模。

2.针对每个用例进行业务分析。以图书管理系统中“删除读者信息”用例为例来说明实验具体步骤。

(1)分析:在图书管理系统中,管理员首先登录系统,系统验证通过后,管理方可向系统查询数据,在查询后,系统会给出提示,有没有找到相关的数据,管理员根据系统查询的返回结果,进行下一步的操作,就是删除读者,在删除的过程中,系统会对查询得到的结果判断该记录是否可以删除,若可以删除,则给删除提示,若不能删除,也给相关的提示信息。

(2)根据分析结果,书写业务流程,一般包含以下信息:

①管理员在录入界面,输入待删除的读者名;

②“业务逻辑”组件在数据库中,查找待删除的读者名; ③如果不存在,则显示出错信息,返回步骤①,如果存在则继续; ④“业务逻辑”组件判断“待删除的读者”是否可以删除; ⑤如果不可以,则显示出错信息,返回步骤⑧,如果可以则继续; ⑥在数据库中,删除相关信息; ⑦显示删除成功信息; ⑧结束。

3.根据分析结果,绘制用例图。以图书管理系统中“删除读者信息”用例为例说明具体绘图步骤:(1)在用例图上双击main,出现如图1.1所示,为绘制用例图做好准备。

图1.1(2)在图中的工具栏选取Actor图标,在右边的图中添加一个Actor,并输入名称:administrator,如图1.2所示。

(3)在左边的工具栏中,选取用例的图标,在右边的图中画出一个用例,并输入用例的名称:login。

图1.2(4)按照步骤(3),绘制出如图1.4和图1.5的两个用例。

图1.3

图1.4

图1.5(5)在绘出了用例后,接下来的是绘制参与者与用例实现,如图1.6所示。

图1.6

(6)根据步骤(5),同时完成如图1.7和图1.8。此时,删除读者用例图就到此完成。其系统查询读者信息等其他的功能会在时序图和活动图中描绘。

(7)根据分析情况,进一步添加或细化用例图。

图1.7

图1.8

五、实验报告要求

1. 说明系统的需求建模结果,对主要用例整理用例图。2. 小结实验心得体会。

实验二 系统的类模型

实验名称:系统的类模型

实验类型: 设计性实验 学

时:2课时

一、实验目的

1.理解类的基本概念。

2.掌握如何从需求分析中抽象出类的方法。

3.掌握在ArgoUML,Rational Rose或StarUML中绘制类的操作方法。

二、实验器材

1.计算机一台。

2.ArgoUML,Rational Rose 或StarUML工具软件。

三、实验内容

完成实验一后,对给定题目的系统的需求的初步分析,得出系统的用例图,通过对用例的业务流程的分析,我们可以初步了解系统的业务处理流程。本实验需要对系统进行静态建模,这就需要从系统的用例图去寻找和发现类。用Rational Rose或StarUML工具软件绘制系统的类图。下文以Rational Rose为例讲解基本步骤。

四、实验步骤

1.分析:由前面试验对需求的分析抽象出类。2.绘制类图的步骤:

(1)打开前面初步构建的UML模型文件;(2)打开Rose中的逻辑视图(Logical View),选择分析模型(analysis model)目录。并在其下创建一个子目录并命名为:“图书馆业务功能”。

(3)用鼠标右击“图书馆业务功能”在弹出来的菜单中选择“New→Class diagram”项,创建类图,如图2.1所示。

(4)双击新建的类图,并点右边控件集中选中的类的图标,并用鼠标在图中分别拖出一个类图,并命名为Book,如图2.2所示。

图2.1

图2.2(5)接下来的一步为设置类的属性,在新的类中双击该类,在打开属性面板中,可以看到在此可以设置类的属性和方法等其他的信息,图2.3所示;后撞击Attributes这个栏目,此栏目为设置类的属性的选项,在图中间的单击右键,可以看到有一个“Insert”的选项,选中这个选项,图2.4所示,后在出现的对话框中输入相关信息如图2.5所示;如书本的ISBN号,在Type这个方框内输入此属性的类型值,同时可以看到一栏可以设置此属性的访问权限,一般这些属性都设置Private这个权限,如图2.6所示。这个类的其他属性也可以按照以上的做法设置,最后得到的结果是图2.7所示。

图2.3 图2.4

图2.5 图2.6(6)设置好类的属性,现在来设置类的方法(也是操作),双击类后在弹出的菜单上选operations这个选项,可以看到图2.8所示,在图中的空白地方,单击右键,在弹出的菜单中选insert这个选项,也就只有这个选项可用,见图2.9,接着输入方法名,同时可以设置该方法的返回类型,也可以在Documentations的方框内填写一些相关的方法说明,如图2.12所示,设置好该方法的访问权限,见图2.13。类的其他方法也可以按上面来设置好,最后,得到该类的其他方法见类2.14。

图2.7 图2.8

图2.9

图2.11

图2.10

图2.12

图2.13 图2.14(7)至此,类的方法和属性都设置好了,如图2.15所示。

图2.15(8)按照上面的步骤设置好所有类的属性和方法。

(9)为各个类添加关系,由关联、泛化、依赖等关系来静态描述业务。

五、实验报告要求

1.整理实验结果。2.小结实验心得体会。实验三 系统的状态建模

实验名称:系统的状态建模

实验类型: 设计性实验 学

时:2课时

一、实验目的

1.熟悉状态图的基本功能和使用方法。2.掌握如何使用建模工具绘制状态图方法。

二、实验器材

1.计算机一台。

2.ArgoUML,Rational Rose或StarUML 工具软件。

三、实验内容

完成实验一后,对给定题目的系统的需求的初步分析,得出系统的用例图,通过对用例的业务流程的分析,我们可以初步了解系统的业务处理流程,但对业务处理过程的处理状态间转换了解仍不够,这不利于设计人员对系统业务的进一步理解,而状态图能从对象的动态行为的角度去描述系统的业务活动。因此,在本实验主要完成用例的状态图。

四、实验步骤

1.业务分析:由前面实验对用例的描述和分析得到业务动态行为的状态分析。以用例“还书”为例,还书业务的动态行为是由:空闲(idle)、图书查找(finding)、还书(reversion)、失败(Failure)、归还成功(Success)5种状态及激活相互转换的事件。

2.绘制状态图。

还书的状态图,还书的主要业务都是由管理员来完成,首先管理员必须先登录系统,并通过验证后,便可以进行下一步的操作,查找该书的相关信息,如存在,则进行还书操作,如不存在该信息,则给出提示信息;

绘图步骤:

(1)在用例图中的还书(revesion)用例,单击右键,如图3.1所示,新建一个状态图,命名为revesion状态图,图3.2所示。

图3.1

图3.2(2)双击“receivesion”状态图,展开后,在左边的工具栏上选取一个实心圆点,此结点为开始结点,图3.3所示;当还书的时候,操作者先要询问系统的状态,如果系统忙,操作者则必需等待,因此,得到系统的两种状态,如图3.5所示。

图3.3

图3.4

图3.5(3)操作者在询问系统和状态后,得到的图3.6所示两种状态,如果系统忙,操作者必需要等待、结束,如图3.7和图3.8所示,重返步骤(1)。

图3.6

图3.7

图3.8(4)如系统空闲,则进行对还书的信息进行查询操作,图3.9所示;查询也有两种结果,一是查询得到该书的相关信息,二查询不到该书的相关信息;则此时有两种状态,需要建立两种状态,如图3.10所示。

图3.9

图3.10(5)最后,操作者进行了操作后,系统会给出操作的结果给操作者;操作成功或失败,都会有提示信息给出。整个的还书的过程便完成;图3.11所示。

(7)根据分析设计情况,进一步添加或细化状态图。

图3.11

五、实验报告要求

上一篇:泰宁旅游的作文下一篇:化成高中书香校园建设学生活动方案