文档库 最新最全的文档下载
当前位置:文档库 › 浙大城院数据结构实验报告report13

浙大城院数据结构实验报告report13

浙大城院数据结构实验报告report13
浙大城院数据结构实验报告report13

浙江大学城市学院实验报告

课程名称数据结构基础

实验项目名称实验十三图的基本操作—邻接表存储结构

学生姓名专业班级学号

实验成绩指导老师(签名)日期

头文件AdjLink.h,在该文件中定义图的邻接表存储结构,并编写图的初始化、建立图、输出图、输出图的每个顶点的度图的深度优先遍历函数与广度优先遍历函数等基本操作实现函数。同时在主函数文件test5_2.cpp中调用这些函数进行验证。

三. 函数的功能说明及算法思路

(包括每个函数的功能说明,及一些重要函数的算法实现思路)

这里针对的都是无向无权图

结构类型定义

//边表结点//顶点表结点//图类型

typedef struct node typedef struct { typedef struct {

{ int adjvex; //邻接点域V ertexType vertex; //顶点域AdjList adjlist; //邻接表node *next; //链域EdgeNode *firstedge; //边表头指针int n,e; //图中当前顶点数和边数

}EdgeNode; }VertexNode; } ALGraph; //图类型

typedef VertexNode AdjList[MaxVertexNum]; //AdjList是邻接表类型

基本面函数

1.void CreatALGraph(ALGraph *G)//构造图

{ 定义边表结点s;

读入顶点数和边数;

读入顶点信息,并将边表置为空;

依次读入<入度点vi,出度点vj>边的信息直到输入的边数达到要求{

为s开辟新空间,邻接点序号为j,并将邻接点指针为i顶点的头指针值,将新结点*S插入顶点Vi的边表头部

为s再开辟新空间,邻接点序号为i,并将邻接点指针为j顶点的头指针值,将新结点*S插入顶点Vj的边表头部} }

2.void DFS(ALGraph *G,int i) //以Vi为出发点对邻接链表表示的图G进行DFS搜索

3.void DFSTraverseM(ALGraph *G)//对整个图进行深度搜索

4.void BFS(ALGraph *G,int k) //以Vk为源点对用邻接链表表示的图G进行广度优先搜索

5.void BFSTraverseM(ALGraph *G){//对整个图进行广度搜索

广度搜索时要建立队列并写队列的相应函数

6.void PrintALGraph(ALGraph *G){//输出表

四. 实验结果与分析

(包括运行结果截图、结果分析等)

五. 心得体会

(记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。)失败点:1.scanf();输入格式上面出错,没有严格按照要求输出所以常常运行到一半就出错误

2.在刚开始的时候以为顶点Vertexnode中VerTex输入的是地址值,

学习点:1.typedef enum{FALSE,TRUE}Boolean;

声明了一个枚举类型一般形式为:enum [枚举名] {枚举元素列表};

也可以声明没有枚举名的枚举类型,就是像你给的那种,后边的bool是枚举类型的变量,可以对其进行赋值,不过只能用FALSE 或者TRUE进行赋值。

【附录----源程序】

test5_2.cpp

#include

#include

#include

#include "AdjLink.h"

void main()

{

int i;

ALGraph *G=(ALGraph *)malloc(sizeof(ALGraph));

CreatALGraph(G);

PrintALGraph(G);

printf("Print Graph DFS:\n ");

DFSTraverseM(G);

printf("\n");

printf("Print Graph BFS:\n ");

BFSTraverseM(G);

printf("\n");

}

AdjLink.h

#include"stdio.h"

#include"stdlib.h"

#define MaxVertexNum 100

#define QueueSize 30

typedef enum{FALSE,TRUE}Boolean;

Boolean visited[MaxVertexNum];

typedef char VertexType;

typedef int EdgeType;

typedef struct node//边表结点

{ int adjvex; //邻接点域

node *next; //链域

}EdgeNode;

typedef struct

{ //顶点表结点

VertexType vertex; //顶点域

EdgeNode *firstedge; //边表头指针

}VertexNode;

typedef VertexNode AdjList[MaxVertexNum]; //AdjList是邻接表类型

typedef struct {

AdjList adjlist; //邻接表

int n,e; //图中当前顶点数和边数

} ALGraph; //图类型

/*=========建立无向图邻接表算法=======*/

void CreatALGraph(ALGraph *G)

{

int i,j,k;

EdgeNode *s; //定义边表结点

printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n ");

scanf("%d,%d",&(G->n),&(G->e)); //读入顶点数和边数

printf("请输入顶点信息(输入格式为:顶点号)每个顶点以回车作为结束:\n");

for(i=0;in;i++) //建立边表

{

scanf("\n%c",&(G->adjlist[i].vertex)); //读入顶点信息

G->adjlist[i].firstedge=NULL; //边表置为空表

}

printf("请输入边的信息(输入格式:i,j):\n");

for(k=0;ke;k++) { //建立边表

scanf("\n%d,%d",&i,&j); //读入边(Vi,Vj)的顶点对序号

s=new EdgeNode;

s->adjvex=j; //邻接点序号为j

s->next=G->adjlist[i].firstedge;

G->adjlist[i].firstedge=s; //将新结点*S插入顶点Vi的边表头部

s=new EdgeNode;

s->adjvex=i; //邻接点序号为i

s->next=G->adjlist[j].firstedge;

G->adjlist[j].firstedge=s; //将新结点*S插入顶点Vj的边表头部}

}

void PrintALGraph(ALGraph *G){//输出表

int i;

for(i=0;in;i++){

printf("%d->",i);

while(G->adjlist[i].firstedge!=NULL){

printf("%d->",G->adjlist[i].firstedge->adjvex);

G->adjlist[i].firstedge=G->adjlist[i].firstedge->next;

}

printf("\n");}

}

/*=======深度优先遍历的递归算法======*/

void DFS(ALGraph *G,int i)

{ //以Vi为出发点对邻接链表表示的图G进行DFS搜索

EdgeNode *p;

printf("vsit vertex:%c\n",G->adjlist[i].vertex); //访问顶点Vi

visited[i]=TRUE; //标记Vi已访问

p=G->adjlist[i].firstedge; //取Vi边表的头指针

while(p) { //依次搜索Vi的邻接点Vj,这里j=p->adjvex if(! visited[p->adjvex]) //若Vj尚未被访问

DFS(G,p->adjvex); //则以Vj为出发点向纵深搜索p=p->next; //找Vi的下一个邻接点

}

}

void DFSTraverseM(ALGraph *G)

{

int i;

for(i=0;in;i++)

visited[i]=FALSE; //标志向量初始化

for(i=0;in;i++)

if(!visited[i]) //Vi未访问过

DFS(G,i); //以Vi为源点开始DFS搜索

}

/*==========BFS:广度优先遍历=========*/

typedef struct{

int front;

int rear;

int count;

int data[QueueSize];

}CirQueue;

void InitQueue(CirQueue *Q)

{

Q->front=Q->rear=0;

Q->count=0;

}

int QueueEmpty(CirQueue *Q)

{

return Q->count=QueueSize;

}

int QueueFull(CirQueue *Q)

{

return Q->count==QueueSize;

}

void EnQueue(CirQueue *Q,int x)

{

if(QueueFull(Q))

printf("Queue overflow");

else

Q->count++;

Q->data[Q->rear]=x;

Q->rear=(Q->rear+1)%QueueSize;

}

}

int DeQueue(CirQueue *Q)

{

int temp;

if(QueueEmpty(Q))

{

printf("Queue underflow");

return NULL;

}

else

{

temp=Q->data[Q->front];

Q->count--;

Q->front=(Q->front+1)%QueueSize;

return temp;

}

}

void BFS(ALGraph *G,int k) { //以Vk为源点对用邻接链表表示的图G进行广度优先搜索int i;

CirQueue Q;

EdgeNode *p;

InitQueue(&Q);//队列初始化

printf("Visit vertex:%c\n",G->adjlist[k].vertex);

visited[k]=TRUE;

EnQueue(&Q,k);

while(!QueueEmpty(&Q)){

i=DeQueue(&Q);

p=G->adjlist[i].firstedge;

while(p){

if(!visited[p->adjvex]){

printf("vsit vertex:%c\n",G->adjlist[p->adjvex].vertex);

visited[p->adjvex]=TRUE;

EnQueue(&Q,p->adjvex);

}

p=p->next;

}

}

}

void BFSTraverseM(ALGraph *G){//对整个图进行广度搜索

for(i=0;in;i++)visited[i]=FALSE; for(i=0;in;i++)

if(!visited[i])

BFS(G,i);

}

数据结构实验报告格式

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

数据结构实验答案1

重庆文理学院软件工程学院实验报告册 专业:_____软件工程__ _ 班级:_____软件工程2班__ _ 学号:_____201258014054 ___ 姓名:_____周贵宇___________ 课程名称:___ 数据结构 _ 指导教师:_____胡章平__________ 2013年 06 月 25 日

实验序号 1 实验名称实验一线性表基本操作实验地点S-C1303 实验日期2013年04月22日 实验内容1.编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。 2.编程实现把顺序表中从i个元素开始的k个元素删除(数据类型为整型)。 3.编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an)变成 (an,…..a2,a1)。(单链表的数据域数据类型为一结构体,包括学生的部分信息:学号,姓名,年龄) 实验过程及步骤1. #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct

{ ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); void main() { SeqList *l; int p,q,r; int i; l=(SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; i<=l->last; i++) { scanf("%d",&l->elem[i]); } px(l,i); printf("请输入要插入的值:\n");

教育实验报告范例

教育实验报告例 1、菊珍、华山:《改善大学生人际交往不良现状的团体辅导实验研究》,载《教育研究与实 验》,2005年第2期。 改善大学生人际交往不良现状的团体辅导实验研究 菊珍、华山 容摘要:本研究通过前测,选取存在人际交往困扰的大学生40人,随机分成实验组和对照组,对实验组按照自行制定的辅导方案,进行14次人际交往团体辅导,用青年性格问卷和大学生人际关系综合诊断量表,结合他评和自评,对辅导效果进行评估。结果表明,人际交往团体辅导对减轻大学生人际交往困扰,增强大学生人际适应能力具有良好的效果。 关键词:大学生人际交往团体辅导 一、研究过程 (一)测试工具 本研究以“青年性格问卷”和“大学生人际关系综合诊断量表”为主要测量工具。“青年性格问卷”是前人根据“加里弗尼业心理测验表”修订而成的,“大学生人际关系综合诊断量表”是由师大学日昌等编制的。 (二)被试选定与分组 本研究以冶金职业技术学院40名存在人际交往困难的大学生为被试。将筛选出来的40名学生随机分成甲乙两组,每组20人。甲组为实验组,乙组为对照组。实验组又随机分为两个小组,每一小组10人,接受完全相同的辅导。为了更好地引导实验组成员适时暴露自己,分析自我,特意安排10个交往正常的大学生加人实验组,一个小组5人。他们在上述心理测验中,未表现出明显的交往困扰,但研究者要求他们参加团体辅导,他们也愿意协助辅导老师开展工作他们在前后测中得分不参与统计分析。乙组则未安排任何形式的辅导。(三)前期调查 辅导前运用自编“大学生人际交往制约因素调查表”,对40名实验对象进行调查,以了解妨碍大学生人际交往的主要因素,为制定团体辅导方案提供依据。本调查表共列出17个不利于交往的心理因素,由被调查者选出其中5个,同时允许其予以补充。 (四)制定辅导方案 辅导分为两类,一类为主题讨论、人为情境训练,共9次,每次分为理论研讨、情境训练和行动作业三个环节。另一类为真实情境训练活动。 (五)实施团体辅导 对实验组实施14次团体辅导,持续7周。 (六)实施后测 团体辅导结束后,用“青年性格问卷”和“大学生人际关系综合诊断量表”对实验组和对照组实施后测。 (七)统计分析 运用王建中教授开发的WJZ心理测量和统计软件对前后测数据进行统计分析,结合师生评价、自我评价,评估团体辅导方案及其实施的有效性。 二、结果 (一)“大学生人际交往制约因素调查表”统计结果 (二)青年性格问卷统计结果 (三)大学生人际关系综合诊断量表统计结果

(完整版)数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 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 始终指向生成的单链表的最后一个节点

数据结构实验报告

数据结构实验报告 一.题目要求 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

《数据结构》实验报告

苏州科技学院 数据结构(C语言版) 实验报告 专业班级测绘1011 学号10201151 姓名XX 实习地点C1 机房 指导教师史守正

目录 封面 (1) 目录 (2) 实验一线性表 (3) 一、程序设计的基本思想,原理和算法描述 (3) 二、源程序及注释(打包上传) (3) 三、运行输出结果 (4) 四、调试和运行程序过程中产生的问题及采取的措施 (6) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (6) 实验二栈和队列 (7) 一、程序设计的基本思想,原理和算法描述 (8) 二、源程序及注释(打包上传) (8) 三、运行输出结果 (8) 四、调试和运行程序过程中产生的问题及采取的措施 (10) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (10) 实验三树和二叉树 (11) 一、程序设计的基本思想,原理和算法描述 (11) 二、源程序及注释(打包上传) (12) 三、运行输出结果 (12) 四、调试和运行程序过程中产生的问题及采取的措施 (12) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (12) 实验四图 (13) 一、程序设计的基本思想,原理和算法描述 (13) 二、源程序及注释(打包上传) (14) 三、运行输出结果 (14) 四、调试和运行程序过程中产生的问题及采取的措施 (15) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (16) 实验五查找 (17) 一、程序设计的基本思想,原理和算法描述 (17)

二、源程序及注释(打包上传) (18) 三、运行输出结果 (18) 四、调试和运行程序过程中产生的问题及采取的措施 (19) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (19) 实验六排序 (20) 一、程序设计的基本思想,原理和算法描述 (20) 二、源程序及注释(打包上传) (21) 三、运行输出结果 (21) 四、调试和运行程序过程中产生的问题及采取的措施 (24) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (24) 实验一线性表 一、程序设计的基本思想,原理和算法描述: 程序的主要分为自定义函数、主函数。自定义函数有 InitList_Sq、Out_List、ListInsert_Sq、ListDelete_Sq、LocateElem_Sq 、compare。主函数在运行中调用上述的自定义函数,每个自定义函数实现程序的每部分的小功能。 1.程序设计基本思想 用c语言编译程序,利用顺序存储方式实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行数据的插入、删除、查找,并在插入或删除数据后,再输出线性表;最后在屏幕菜单中选择结束按钮,即可结束程序的运行。 2.原理 线性表通过顺序表现,链式表示,一元多项式表示,其中链式表示又分为静态链表,双向链表,循环链表等,在不同的情况下各不相同,他可以是一个数字,也可以是一个符号,通过符号或数字来实现程序的运行。 3.算法描述

数据结构实验报告图实验

图实验一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10;

template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif MGraph.cpp

#include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) {

数据结构实验报告(2015级)及答案

数据结构实验报告(2015级)及答案

《数据结构》实验报告 专业__信息管理学院______ 年级__2015级___________ 学号___ _______ 学生姓名___ _ _______ 指导老师____________ 华中师范大学信息管理系编

I 实验要求 1.每次实验中有若干习题,每个学生至少应该完成其中的两道习题。 2.上机之前应作好充分的准备工作,预先编好程序,经过人工检查无误后,才能上机,以提高上机效率。 3.独立上机输入和调试自己所编的程序,切忌抄袭、拷贝他人程序。 4.上机结束后,应整理出实验报告。书写实验报告时,重点放在调试过程和小节部分,总结出本次实验中的得与失,以达到巩固课堂学习、提高动手能力的目的。 II 实验内容 实验一线性表 【实验目的】 1.熟悉VC环境,学习如何使用C语言实现线性表的两种存储结构。 2.通过编程、上机调试,进一步理解线性表的基本概念,熟练运用C语言实现线性表基本操作。 3.熟练掌握线性表的综合应用问题。 【实验内容】 1.一个线性表有n个元素(n

的顺序不变。设计程序实现。要求:采用顺序存储表示实现;采用链式存储表示方法实现;比较两种方法的优劣。 2. 从单链表中删除指定的元素x,若x在单链表中不存在,给出提示信息。 要求: ①指定的值x由键盘输入; ②程序能处理空链表的情况。 3.设有头结点的单链表,编程对表中的任意值只保留一个结点,删除其余值相同的结点。 要求: ①该算法用函数(非主函数)实现; ②在主函数中调用创建链表的函数创建一个单链表, 并调用该函数,验证算法的正确性。 LinkedList Exchange(LinkedList HEAD,p)∥HEAD是单链表头结点的指针,p是链表中的一个结点。本算法将p所指结点与其后 继结点交换。 {q=head->next;∥q是工作指针,指向链表中当前待处理结点。 pre=head;∥pre是前驱结点指针,指向q的前驱。 while(q!=null && q!=p){pre=q;q=q->next;} ∥

数据结构图的遍历实验报告

实验项目名称:图的遍历 一、实验目的 应用所学的知识分析问题、解决问题,学会用建立图并对其进行遍历,提高实际编程能力及程序调试能力。 二、实验容 问题描述:建立有向图,并用深度优先搜索和广度优先搜素。输入图中节点的个数和边的个数,能够打印出用邻接表或邻接矩阵表示的图的储存结构。 三、实验仪器与设备 计算机,Code::Blocks。 四、实验原理 用邻接表存储一个图,递归方法深度搜索和用队列进行广度搜索,并输出遍历的结果。 五、实验程序及结果 #define INFINITY 10000 /*无穷大*/ #define MAX_VERTEX_NUM 40 #define MAX 40 #include #include #include #include

typedef struct ArCell{ int adj; }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { char name[20]; }infotype; typedef struct { infotype vexs[MAX_VERTEX_NUM]; AdjMatrix arcs; int vexnum,arcnum; }MGraph; int LocateVex(MGraph *G,char* v) { int c = -1,i; for(i=0;ivexnum;i++) if(strcmp(v,G->vexs[i].name)==0) { c=i; break;} return c;} MGraph * CreatUDN(MGraph *G)//初始化图,接受用户输入{ int i,j,k,w; char v1[20],v2[20]; printf("请输入图的顶点数,弧数:"); scanf("%d%d",&G->vexnum,&G->arcnum);

数据结构实验报告模板

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);//重载赋

数据结构实验报告-答案

数据结构(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] 留在原位

浙大微生物大实验报告

摘要:本实验以土壤中的微生物作为原材料,根据微生物各自的生长特点,配制不同成分的微生物培养基。将微生物培养物或含有微生物的样品在无菌条件下移植到培养基上培养,在分离出相应微生物后,对其进行进一步的纯化,然后观察其形态特征,并通过微生物的生理生化反应对其种类进行鉴定,最后研究环境条件对微生物生长的影响。 关键字:培养基,分离,纯化,鉴定,环境条件 一、实验材料 1、分离细菌、真菌、放线菌的材料:牛肉膏、蛋白胨、氯化钠、琼脂、马铃薯、蔗糖;可溶性淀粉、K2HPO4、KNO3、MgSO4·7H2O、FeSO4·7H2O等。新鲜土壤;培养基:灭菌的牛肉膏蛋白胨琼脂培养基、淀粉琼脂培养基、马铃薯蔗糖培养基(10mL装);试剂:5000U/mL链霉素液、0.5%重铅酸钾液。 2、细菌、真菌、放线菌纯化与鉴定的材料:菌种:大肠杆菌、枯草杆菌、荧光假单胞菌、金黄色葡萄球菌,前实验分离的未知菌;培养基:淀粉培养基、硫化氢实验培养基、石蕊牛乳培养基、油脂培养基;试剂:碘液。菌种:枯草杆菌斜面;灵杆菌菌液;黑曲霉斜面。培养基采用:牛肉膏蛋白胨斜面培养基牛肉膏蛋白胨琼脂培养基(10mL)、马铃薯蔗糖培养基(10mL)、淀粉琼脂培养基(10mL);供试药剂: 2.5%碘酒,75%酒精,0.1%HgCl2,5%石炭酸。 二、实验步骤 1、分离细菌、真菌、放线菌的步骤 (一)、培养基配制 l. 培养基配制的一般方法和步骤 (1)称量:按照培养基配方,正确称取各种原料放于搪瓷杯中。 (2)溶化:在搪瓷杯中加入所需水量(根据实验需要加入蒸馏水或自来水),用玻棒搅匀,加热溶解。 (3)调pH值(调pH也可以在加琼脂后再调),用1N NaOH或1N HCl调pH,用pH试纸对照。 (4)加琼脂溶化,在琼脂溶化过程中,需不断搅拌,并控制火力不要使培养基溢出或烧焦,待完全溶化后,补足所失水分,一般数量少,时间短不必补水。 (5)分装:在漏斗架上分装。根据不同的需要进行分装,一般制斜面的装置为管高的1/5 特别注意不要使培养基粘污在管(瓶)口上以免浸湿棉塞,引起污染。 (6)包扎成捆、挂上标签。培养基分装好后,塞上棉塞,用防水纸包扎成捆挂上所配培养基名称的标签。 (7)灭菌备用。灭菌后如需制成斜面的,应在下磅后取出,摆成斜面(见图6-1)。培养基经灭菌

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; }

int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

数据结构实验报告-答案.doc

数据结构实验报告-答案 数据结构(C语言版)实验报告专业班级学号姓名实验1实验题目:单链表的插入和删除实验目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求:建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤:1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序:(1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码:#include“stdio.h“#include“string.h“#include“stdlib.h“#include“ctype. h“typedefstructnode//定义结点{chardata[10];//结点的数据域为字符串structnode*next;//结点的指针域}ListNode;typedefListNode*LinkList;//自定义LinkList单链表类型LinkListCreatListR1();//函数,用尾插入法建立带头结点的单链表LinkListCreatList(void);//函数,用头插入法建立带头结点的单链表ListNode*LocateNode();//函数,按值查找结点voidDeleteList();//函数,删除指定值的结点voidprintlist();//函数,打印链表中的所有值voidDeleteAll();//函数,删除所有结点,释放内存

浙大(参考)生统实验报告3

本科实验报告 课程名称:生物统计学及试验设计 陈心源 姓名: 农业与生物技术学院学院: 园艺 系: 专业:园艺 3120100418 学号: 指导教师:朱军/徐海明 2014年6月3日

实验报告 课程名称:生物统计学及试验设计指导老师:徐海明成绩:__________________ 实验名称:协方差分析和混合线性模型分析 一、实验目的和要求(必填) 二、实验内容和原理(必填) 三、实验材料与试剂(必填)四、实验器材与仪器(必填) 五、操作方法和实验步骤(必填)六、实验数据记录和处理 七、实验结果与分析(必填)八、讨论、心得 一、 实验目的和要求 学习协方差分析与二因素析因分析的方法。了解SAS 、QTModel 、QTLNetwork 等软件的数据分析功能,以及SAS 和QTModel 软件的分析效益。比较回归分析、相关分析、方差分析、MCIM 定位分析 的优劣。 二、 实验内容和原理 2.1二因素协方差分析方法 2.2 QTModel 分析方法 2.3 QTL 定位分析方法 2.4 回归分析、相关分析、方差分析方法 三、 主要仪器设备 计算机(使用SAS 软件、QTModel 软件、QTLNetwork 软件) 四、 操作方法与实验步骤 4.1二因素协方差分析 以2个品种2个水分水平的鲜花产量为依变量,重复6次: (1)以小区面积为x 变量,进行二因素协方差分析,分析品种、水分对鲜花产量的影响,对显著的效应进行适当的比较; (2)比较协方差分析与二因素析因分析结果之间的差异。 4.2水稻品种区域试验分析 水稻五个品种在二年和三试点三个区组的品种区域试验数据(删除了二个异常值)储存在数据文件(RiceTrial-2.txt)中。 (1)采用SAS 软件的Proc GLM ,Proc Mixed 和Proc VarCom 分析该数据,并对品种的表现作适宜的推断; (2)采用QTModel 软件分析该数据,对品种的表现作适宜的推断; (3)比较SAS 软件和QTModel 软件的分析效益。

浙大生物统计实验报告3

课程名称:生物统计与实验设计姓名:赵应 学院:农业与生物技术学院系:应用生物科学 专业:应用生物科学 学号:3140100080 指导教师:朱军、徐海明 2016年6月6日

实验报告 课程名称:生物统计与实验设计指导老师:徐海明成绩:_______________ 实验名称:协方差分析和混合线性模型分析实验类型:综合实验 一、 实验目的和要求 1. 掌握协方差分析、混合线性模型的原理。 2. 学会用协方差分析和混合线性模型对大数据进行分析。 3. 了解协方差分析与二因素析因分析的差异。 4. 比较SAS 软件和QTModel 软件的分析效益。 5. QTLNetwork 软件分析控制仿真群体表现型值的QTL 定位数据。 6. 比较回归分析、相关分析、方差分析、MCIM 的定位分析的优缺点。 二、 实验内容和原理 1. 协方差分析是建立在方差分析和回归分析基础之上的一种统计分析方法。方差分析 是从质量因子的角度探讨因素不同水平对实验指标影响的差异。一般说来,质量因子是可以人为控制的。回归分析是从数量因子的角度出发,通过建立回归方程来研究实验指标与一个(或几个)因子之间的数量关系。但大多数情况下,数量因子是不可以人为加以控制的。 2. 混合线性模型(mixed linear model)一种方差分量模型。在方差分量模型中,把既含 有固定效应,又含有随机效应的模型,称为混合线性模型。 三、 主要仪器设备 SAS 软件、QTModel 软件、QTLNetwork 软件 四、 操作方法和实验步骤 1. 二因素协方差分析 以2个品种2个水分水平的鲜花产量为依变量,重复6次: a) 以小区面积为x 变量,进行二因素协方差分析,分析品种、水分对鲜花产量的 影响,对显著的效应进行适当的比较; b) 比较协方差分析与二因素析因分析结果之间的差异。 2. 水稻品种区域试验分析 水稻五个品种在二年和四个试点三个区组的品种区域试验数据(删除了二个异常值)储存在数据文件(RiceTrial-2.txt)中。 a) 采用SAS 软件的Proc GLM, Proc Mixed 和Proc VarCom 分析该数据,并对品 种的表现作适宜的推断; b) 采用QTModel 软件分析该数据,对品种的表现作适宜的推断;比较SAS 软件 和QTModel 软件的分析效益。 3. QTL 定位分析 采用QTLNetwork 软件分析控制仿真群体表现型值的QTL 定位数据(DHSim.map 和DHSim.txt )。 a) 估算QTL 的位置和遗传效应,对群体的QTL 位置和遗传效应作统计推断; b) 把QTL 定位结果和实验一的分析结果都与仿真的参数真值作比较,比较所采 用的四种分析方法(回归分析、相关分析、方差分析、MCIM 的定位分析)用于推断群体基因定位的可靠性及统计方法的优缺点。 五、 实验数据记录和处理

数据结构实验报告无向图

《数据结构》实验报告 ◎实验题目: 无向图的建立与遍历 ◎实验目的:掌握无向图的邻接链表存储,熟悉无向图的广度与深度优先遍历。 ◎实验内容:对一个无向图以邻接链表存储,分别以深度、广度优先非递归遍历输出。 一、需求分析 1.本演示程序中,输入的形式为无向图的邻接链表形式,首先输入该无向图的顶点数和边数,接着输入顶点信息,再输入每个边的顶点对应序号。 2.该无向图以深度、广度优先遍历输出。 3.本程序可以实现无向图的邻接链表存储,并以深度、广度优先非递归遍历输出。 4.程序执行的命令包括:(1)建立一个无向图的邻接链表存储(2)以深度优先遍历输出(3)以广度优先遍历输出(4)结束 5.测试数据: 顶点数和边数:6,5 顶点信息:a b c d e f 边的顶点对应序号: 0,1 0,2 0,3 2,4 3,4 深度优先遍历输出: a d e c b f 广度优先遍历输出: a d c b e f 二概要设计 为了实现上述操作,应以邻接链表为存储结构。 1.基本操作: void createalgraph(algraph &g) 创建无向图的邻接链表存储 void dfstraverseal(algraph &g,int v)

以深度优先遍历输出 void bfstraverseal(algraph &g,int v) 以广度优先遍历输出 2.本程序包含四个模块: (1)主程序模块 (2)无向图的邻接链表存储模块 (3)深度优先遍历输出模块 (4)广度优先遍历输出模块 3.模块调用图: 三详细设计 1.元素类型,结点类型和指针类型:typedef struct node { int adjvex; struct node *next; }edgenode; typedef struct vnode { char vertex; edgenode *firstedge; }vertxnode; typedef vertxnode Adjlist[maxvernum]; typedef struct { Adjlist adjlist; int n,e; }algraph; edgenode *s; edgenode *stack[maxvernum],*p; 2.每个模块的分析: (1)主程序模块 int main()

数据结构实验报告及心得体会

2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨

实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。

三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } for(i=0;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1;

相关文档