收藏 分享(赏)

数据结构 实验指导书.pdf

上传人:精品资料 文档编号:11065255 上传时间:2020-02-06 格式:PDF 页数:34 大小:295.38KB
下载 相关 举报
数据结构 实验指导书.pdf_第1页
第1页 / 共34页
数据结构 实验指导书.pdf_第2页
第2页 / 共34页
数据结构 实验指导书.pdf_第3页
第3页 / 共34页
数据结构 实验指导书.pdf_第4页
第4页 / 共34页
数据结构 实验指导书.pdf_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、数据结构实验指导书 目 录 第一部分:数据结构实验大纲 一、 数据结构实验的地位与作用 二、 数据结构实验的目的 三、 数据结构实验的实验要求 四、 数据结构课程实验 实验环境 五、 数据结构课程实验考核方式 第二部分: 数据结构实验步骤和实验报告规范 一、 数据结构实验步骤 二、 数据结构实验报告规范 三、 数据结构 实验报告示例 第三部分:数据结构实验内容 实验一 线性表的操作 实验二 栈的基本操作 实验三 字符串处理 实验四 排序 实验五 十字链表的矩阵运算 实验六 二叉树的操作 实验七 查找 实验八 图的操作 1数据结构实验指导书 数据结构实验指导书 第一部分:数据结构实验大纲 一、

2、数据结构实验的地位与作用 数据结构 是计算机、信息管理和电子商务专业一门重要的专业技术基础课程,是计算机、信息管理和电子商务专业的一门关键性课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了一些性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 数据结构课程内容丰富,学习量大,给学习带来一定的困难;所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度;隐含在各部分的技术和方法丰富,也是学习的重点和难点。根据数据结构课程本身的技术特性,设置数据结构课程

3、实验实践环节十分重要。通过实验实践内容的训练,突出学生程序思维训练和动手上机调试程序的能力 , 目的是提高学生组织数据及编写大型程序的能力 二、数据结构实验的目的 使学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构、算法和程序设计技术的能力,而且可以在总是分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养计算机软件工作所需要的动手能力。 不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求

4、所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技2数据结构实验指导书 术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能

5、力。 三、数据结构实验的实验要求 1 、阅读实验指导书 每一次实验从阅读实验指导书开始。对于本次实验的实验目的、实验题目、实现提示以及思考题目、选做题目等应认真了解。 2 、算法设计 分析实验题目,参考实现提示,进行算法设计。 3 、程序设计 根据已完成的算法,用 C 语言进行程序设计。 4 、调试和测试 将所编程序在计算机上调试通过,并选取若干组测试数据对程序进行尽可能全面的测试。 5 、整理完成实验报告 实验报告一般包括下列内容: z 实验者姓名、学号、专业和班级,课程名称(数据结构课程设计) ,实验日期等; z 本交实验的实验编号及实验名称(例如:实验一 线性表的应用) z 本次实验的实

6、验目的; z 本次实验的实验地点、设备编号、硬件及软件环境; z 程序结构的描述及各模块的规格说明; z 主要算法及其基本思想; z 调试过程简述(调试过程是否顺利,遇到些什么问题,如何解决的,以及上机操作所花费的时间等); z 测试数据和相应输出的客观纪录,对运行结果的分析讨论。 四、数据结构课程实验 实验环境 多媒体微型计算机 Pentium IV 1GHz 以上, 256MB RAM 以上 ;Windows/2000, ?XP Turbo C 或 Visual C+6.0 五、 数据结构课程实验考核方式 采用上机情况、程序质量、实验报告相结合的形式, 第二部分: 数据结构实验步骤和实验报

7、告规范 3数据结构实验指导书 一、数据结构实验步骤 随着计算机性能的提高,它所面临的软件开发的复杂度也日趋增加,因此软件开发需要系统的方法。一种常用的软件开发方法,是将软件开发过程分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的实习题的复杂度远不如实际中真正的软件系统,但为了培养一个软件工作者所应具备的科学工作的方法和作风,我们制订了如下所述完成实习的 5 个步骤: 1 、问题分析和任务定义 通常,实验题目的陈述比较简洁,或者说有模棱两可的含义。因此,在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么,限制条件是什么。注意:本步骤强调的是做什么,而不是怎么做。对问题的描述

8、应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么,是否接受非法的输入,对非法输入的回答方式是什么等等。这一步还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式输入的数据。 2 、数据类型和系统设计 在设计这一步骤中需分逻辑设计和详细设计两步实现。逻辑设计指的是,对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。详细设计则为定义相应的存储结构并写出各过程和函数的伪码算法。在这个过程中,要

9、综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。作为逻辑设计的结果,应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的规格说明) ,各个主要模块的算法,并画出模块之间的调用关系图。详细设汁的结果是对数据结构和基本操作的规格说明作出进一步的求精,写出数据存储结构的类型定义,按照算法书写规范用类 C 语言写出过程或函数形式的算法框架。在求精的过程中,应尽量避免陷入语言细节,不必过早表述辅助数据结构和局部变量。 3 、编码实现和静态检查 编码是把详细设计的结果进一步求精为程序设计语言程序。如何编写程序才能

10、较快地完成调试是特别要注意的问题。程序的每行不要超过 60 个字符。每个4数据结构实验指导书 过程(函数)体一般不要超过 40 行,最长不得超过 60 行,否则应该分割成较小的过程(函数)。要控制 if 语句连续嵌套的深度,分支过多时应考虑使用 switch 语句。对函数功能和重要变量进行注释。一定要按格式书写程序,分清每条语句的层次,对齐括号,这样便于发现语法错误。 在上机之前,应该用笔在纸上写出详细的程序编码,并做认真地静态检查。多数初学者在编好程序后处于以下 两种状态之一:一种是对自己的 “ 精心作品 ” 的正确性确信不疑;另一种是认为上机前的任务已经完成,纠查错误是上机的工作。这两种态

11、度是极为有害的。对一般的程序设计者而言,当编写的程序长度超过 50 行时,通常会含有语法错误或逻辑错误。上机动态调试决不能代替静态检查,否则调试效率将是极低的。静态检查主要有两种方法,一是用一组测试数据手工执行程序(通常应先检查单个模块) ;二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注解。 4 上机准备和上机调试 上机准备包括以下几个方面: z 熟悉 C 语言用户手册或程序设计指导书。 z 注意 Turbo C 、 VC 与标准 C 语言之间的细微差别。 z 熟悉机器的操作系统和语言集成环境的用户手册,尤其是最常用的命令操作,以便 顺利进行上机的基本活动

12、。 z 掌握调试工具, 考虑调试方案, 设计测试数据并手工得出正确结果。 “ 磨刀不误砍柴工 ” 。学生应该熟练运用高 级语言的程序调试器 DEBUG 调试程序。 上机调试程序时要带一本高级语言教材或手册。调试最好分模块进行,自底向上,即先调试低层过程或函数。必要时可以另写一个调用驱动程序。这种表面上麻烦的工作实际上可以大大降低调试所面临的复杂性,提高调试工作效率。 在调试过程中可以不断借助 DEBUG 的各种功能,提高调试效率。调试中遇到的各种异常现象往往是预料不到的,此时不应 “ 苦思冥想 ” ,而应借助系统提供的调试工具确定错误。调试正确后,认真整理源程序及其注释,印出带有完整注释的且格

13、式良好的源程序清单和结果。 5 、总结和整理实验报告 二、数据结构实验报告规范 5数据结构实验指导书 实习报告的开头应给出题目、班级、姓名、学号和完成日期,并包括以下 7 个内容: 1 需求分析 以无歧义的陈述说明程序设计的任务,强调的 是程序要做什么?并明确规定: 输入的形式和输入值的范围; (输出的形式; (程序所能达到的功能; (测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。 2 概要设计 说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次 ( 调用 ) 关系。 3 详细设计 实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;

14、对主程序和其他模块也都需要写出伪码算法 ( 伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接 输入高级程序设计语言程序 ) ;画出函数和过程的调用关系图。 4 调试分析 内容包括: 调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析; 算法的时空分析 ( 包括基本操作和其他算法 的时间复杂度和空间复杂度的分析 ) 和改进设想; 经验和体会等。 用户使用说明,说明如何使用你编写的程序,详细列出每一步的操作步骤。 6 测试结果 列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。 6数据结构实验指导书 7 附录 带注释的源程序。如果提

15、交源程序软盘,可以只列出程序文件名的清单。 值得注意的是,实习报告的各种文档资料,如:上述中的前三部分要在程序开发的过程中逐渐充实形成,而不是最后补写 ( 当然可以也应该最后用实验报告纸誊清或打印 ) 三、数据结构 实验报告示例 7数据结构实验指导书 实 验 报 告 实验项目名称 实验一线性表的操作 实 验 室 电子商务所属课程名称 数据结构实 验 类 型 验证实验实 验 日 期 2007/3/14班 级 XXXXXXXX 学 号 XXXXXXXX姓 名 XXXXXXXX成 绩 8数据结构实验指导书 实验一 线性表的操作 一、实验目的 1、掌握用上机调试线性表的基本方法; 2、掌握线性表的基本

16、操作,插入、删 除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。 二、实验环境 硬件:PC 微型计算机、256M 以上内存,40G 以上硬盘。 软件: Windows XP, Turbo C/C+ 三、实验内容 线性表基本操作的实现 当我们要在线性表的顺序存储结构上的第 i 个位置上插入一个元素时,必须先将线性表的第 i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。若要删除第 i 个元素时,也必须把第 i 个元素之后的所有元素前移一个位置。 四、实验步骤 1、 本实验的程序清单如下。 下面只是根据实验指导书上的程序,各位同学要按照实际上机调

17、试后的结果程序附上: typedef Null 0; typedef int datatype; #define maxsize 1024; typedef struct datatype datamaxsize; int last; sequenlist; int insert(L, x, i) sequenlist *L; int i; int j; 9数据结构实验指导书 if (*L).last= =maxsize-1) printf(“overflow”); return Null; else if (i(*L).last+1) printf(“error”); return Null

18、; else for(j=(*L).last; j=i-1; j-) (*L).dataj+1=(*L).dataj; (*L).datai-1=x; (*L).last=(*L).last+1; return(1); int delete(L,i) sequenlist *L; int i; int j; if (i(*L).last+1) printf (“error”); return Null; else for(j=i, j(*L).last+1) printf(“error”); return Null; else for(j=(*L).last; j=i-1; j-) (*L).

19、dataj+1=(*L).dataj; (*L).datai-1=x; (*L).last=(*L).last+1; return(1); int delete(L,i) sequenlist *L; int i; int j; if (i(*L).last+1) printf (“error”); return Null; else for(j=i, j #define MAXN 100 typedef enum fail, success status; typedef enum false, true boolean; char sMAXN, s1MAXN, s2MAXN; void s

20、copy(char s1,char s2) int i=0; while(s2i!=0) s1i=s2i; i+; s1i=0; int strlen(char s ) int i; for (i=0; si!=0; i+ ); return (i); status strcat(char s1,char s2) int i, j, k; 18数据结构实验指导书 if (i=strlen (s1) + (j=strlen (s2) )=MAXN) return (fail); for (k=0; k(m=strlen(s1)|m+(n=strlen(s2)MAXN) return(fail);

21、 for (k=m; k=i; k-) s1k+n=s1k; for (k=0; k= (m=strlen(sl) return (fail ); if (jm) return (fail ); for (k=0; kRmax.score) 21数据结构实验指导书 max=j; if (max!=i) temp = Rmax; Rmax=Ri; Ri= temp; if (i0) 22数据结构实验指导书 struct node * right, * down; typedef struct node NODE; NODE * a, * b, * c; NODE * create_null_ma

22、t(m,n) int m, n; NODE *h, * p, * q; int k; h = (NODE * )malloc (sizeof(NODE) ); h-row =m; h-col= n; h-val=0; h-right=h; h-down=h; p=h; for (k=0; kcol=1000; q-right=q; q-down=p-down; p-down=q; P=q; p=h; for (k=0;krow=1000; q-down=q; q-right=p-right; p-right=q; p=q; 23数据结构实验指导书 return(h); NODE * searc

23、h_row_last(a,i) NODE *a; int i; NODE *p, *h; int k; p = a ; for (k=0; kdown; h=p; while (p-right!=h) p=p-right; return (p); NODE *search_col_last(a,j) NODE * a; int j; NODE * p, * h; int k: p = a; for (k=O; kright; h=p; while (p-down !=h) p=p-down; return (p); void insert_node(a,row,col,value). NODE

24、 * a; int row,col,value; NODE * p, * q, * r; p =search_row_last (a, row ); 24数据结构实验指导书 q =search_col_last(a,col); r= (NODE * )malloc(sizeof(NODE); r-row=row; r-col=col; r-val=value; r-right=p-right; p-right=r; r-down=q-down; q-down=r; a-val+; NODE *create_mat() int m,n,t, i,j,k,v; NODE * h; printf (

25、“ Input 3 -tuples: n“ ) ; printf(“ % 3d: “, 0); scanf(“ %d, %d, %d“, h=create_null_mat(m,n); for (k=1; krow,a-col); p=a-down; 25数据结构实验指导书 u =b-down; while (p!=a) q=p-right; v=u-right; while (q!=p|v!=u) if (q-col=v-col) if (q-val+v-val!=0) insert_node(c,q-row,q-col,q-val+v-val); q=q-right; v=v-right;

26、 else if (q-colcol ) insert_node (c,q-row,q-col,q-val ); q=q-right; else insert_node(c,v-row,v-col,v-val ); v=v-right; P=p-down; u = u-down; return (c ); 三、实验思考题与练习 1、十字链表和其它链表的比较,有什么关系? 2、十字链表和其它链表的其它运算的实现? 实验六 二叉树的操作 一、实验目的 26数据结构实验指导书 1、进一步掌握指针变量、动态变量的含义; 2、掌握二叉树的结构特征,以及各种存储结构的特点及适用范围; 3、掌握用指针类型描

27、述、访问和处理二叉树的运算。 二、 实验要求 1 认真阅读和掌握本实验的程序。 2 上机运行本程序。 3 保存和打印出程序的运行结果,并结合程序进行分析。 4 按照你二叉树的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 三、实验内容 已知以二叉链表作存储结构,试编写按层次顺序遍历二叉树的算法。 算法思想:本算法要采用一个队列 q,先将二叉树根结点入队列,然后退队列,输出该结点;若它有左子树,便将左子树根结点入队列;若它有右子树,便将右子树根结点入队列,直到队列空为止。因为队列的特点是先进先出,从而达到按层次顺序遍历二叉树的目的。 程序实现: #define M 100 #defin

28、e Null 0 typedef struct node int data; stuuct node *lchild, *rchild; bitree; bitree *queM; int front=0, rear=0; bitree *creat( ) bitree *t; int x; scanf (“%d”, if (x= =0) t=Null; 27数据结构实验指导书 else t=malloc(sizeof(bitree); tdata=x; tlchild=creat( ); trchild=creat( ); return t; void inorder( t ) bitree

29、 *t; if (t!=Null) inorder (tlchild); printf(“%4d”, tdata); inorder (trchild); void enqueue(t) bitree *t; if(front!=(rear+1) % M) rear = (rear+1) % M; querear=t; bitree *delqueue( ) if (front= =rear) 28数据结构实验指导书 return Null; front=(front+1) % M; return (quefront); void levorder ( t ) bitree *t; bitre

30、e *p; if(t!=Null) enqueue( t ); while(front!=rear) p=delqueue( ); printf(“%4d”, pdata); if(plchild!=Null) enqueue(pl child); if(prchild!=Null) enqueue(prchild); main ( ) bitree *root; printf(“n”); root=creat ( ); inorder(root); printf(“n”); levorder(root); 四、实验思考题与练习 29数据结构实验指导书 2、二叉树顺序表示和相应的操作? 3、二

31、叉树的递归算法? 4、二叉树的应用举例? 选择一个以上题目进行实验,并编写实验报告 实验七 查找 一、实验目的 1、掌握查找的不同方法,并能用高级语言实现查找算法; 2、熟练掌握二叉树的构造和查找方法。 二、实验要求 1认真阅读和掌握本实验的算法。 2上机将本算法实现。 3保存和打印出程序的运行结果,并结合程序进行分析。 三、实验内容 设计一个读入一串整数构成一棵二叉排序树的算法。 实现提示 二叉排序树的构成,可从空的二叉树开始,每输入一个结点数据,就建立一个新结点插入到当前已生成的二叉排序树中,所以它的主要操作是二叉排序树插入运算。在二叉排序树中插入新结点,只要保证插入后仍符合二叉排序树的定义即可。 算法实现 typedef struct node int key; int other; struct node *lchild, *rchild; bstnode; void inorder ( t ) bstnode *t; if (t!=Null) inorder(t lchild); 30

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报