ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:31.88KB ,
资源ID:9214385      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9214385.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《数据结构实验指导书》08年.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《数据结构实验指导书》08年.docx

1、数据结构实验指导书08年数据结构实验教学大纲课程编号:17012030 课程类别:专业基础课 适用专业:计算机科学与技术 实验学时:12一、本门课程实验的性质、任务与目的数据结构课程是计算机科学与技术专业的一门重要的专业基础课。通过此实验教学和学生的上机实践,要求学生掌握各种数据结构的具体物理实现方法,掌握用数据结构知识解决实际问题的方法,以达到理论指导实践的目的。从而进一步提高学生的编程能力、算法设计能力及分析问题、解决问题的能力。二、实验项目序号实验名称学时实验性质开出要求1线性表2设计性必做2栈与队列2设计性必做3二叉树2设计性必做4图2设计性必做5查找2设计性必做6排序2设计性必做三、

2、实验概述实验一:线性表目的:掌握线性表的表示及其基本操作的实现方法与算法。原理概述:顺序表及链表的实现方法方法与手段:利用顺序序表及各种链表的实现方法,学生自行设计并编写程序实现线性表的存储表示及其主要的基本操作,并上机调试、运行及进行验证。还可以进一步设计并编程实现集合的表示及并、交等操作,一元多项式的表示及其相加等操作。应得到的实验结果和数据:能够编程实现线性表的一种或多种表示,通过输出相应操作结果(如各种操作后线性表中的元素)验证设计算法的正确性。实验二:栈与队列 目的:掌握栈与队列的表示及其基本操作的实现方法与算法。原理概述:栈的特性及其实现方法;队列的特性及链队列、循环队列的实现方法

3、。方法与手段:利用栈与队列的实现方法,学生自行设计并编写程序实现栈与队列存储表示及其主要的基本操作,并上机调试、运行及进行验证。还可以进一步设计并编程实现进制转换问题、括号匹配问题。应得到的实验结果和数据:能够编程实现栈与队列的一种或多种表示,通过输出相应操作结果(如各种操作后栈或队列中的元素)验证设计算法的正确性。实验三:二叉树目的:掌握二叉树的表示及其创建、遍历、求深度等基本操作的实现方法与算法。原理概述:二叉树的二叉链表表示方法与二叉树的创建、遍历等算法的实现方法。方法与手段:利用二叉树的二叉链表存储实现方法,学生自行设计并编写程序实现二叉树的表示及其创建、遍历等主要操作,并上机调试、运

4、行及进行验证。亦可进一步完成哈夫曼树及哈夫曼编码算法。应得到的实验结果和数据:能够编程实现二叉树的二叉链表表示,通过输出相应操作结果(如二叉树的各种遍历序列、二叉树的深度等)验证设计算法的正确性。实验四:图目的:掌握图的存储表示(邻接矩阵或邻接表)及相关操作的实现方法。原理概述:图的邻接矩阵表示法、邻接表表示法;图的创建、遍历等基本操作算法;以及最小生成树、拓扑排序等算法。方法与手段:利用图的一种存储实现方法,学生自行设计并编写程序实现图的表示及其创建、遍历等等主要操作,并上机调试、运行及进行验证。还可以进一步设计并编程实现图的最小生成树、拓扑排序等。应得到的实验结果和数据:能够编程实现图的一

5、种存储表示,通过输出相应操作结果(如存储结构图、图的遍历序列等)验证设计算法的正确性。实验五:查找目的:通过上机,掌握顺序查找、折半查找及二叉排序树等的相关查找算法。原理概述:顺序查找算法;折半查找(二分法查找)算法;二叉排序树及其创建、查找等算法。方法与手段:学生自行设计并编写程序实现顺序表上的顺序查找与折半查找算法,以及二叉排序树及其创建、查找等主要操作,并上机调试、运行及进行验证。应得到的实验结果和数据:(1)能够编程实现顺序表上顺序查找、折半查找算法的一种存储表示,通过输出相应操作结果(如查找表中的元素、查找结果等)验证设计算法的正确性。(2)能够编程完成二叉树排序树的创建、查找、中序

6、遍历等操作,通过输出其中序(根)序列验证设计算法的正确性。实验六:排序目的:通过上机,掌握相关排序算法的设计思想及实现方法。原理概述:直接插入排序、希尔(Shell)排序、快速排序、堆排序及二路归并排序等排序算法的设计思想及方法。方法与手段:利用相关的排序方法,学生自行设计并编写程序实现顺序表上排序,并上机调试、运行及进行验证。应得到的实验结果和数据:能够编程实现排序表的创建、排序等操作,并通过输出排序前及排序后排序表中元素的值,以验证设计的排序算法的正确性。四、主要仪器设备配置硬件环境:微机(每生一台)软件环境:VC+(或TC3.0)五、教学形式应用多媒体讲授实验内容、要求及注意事项,上机辅

7、导,最后进行实验总结,学生给出每次实验的实验报告。六、考核方式及成绩评定办法每次完成实验内容,进行总结分析,写出实验报告。按照学生每次的实验态度、实验内容完成情况及实验报告书写情况等方面进行考核,实验总成绩占期末成绩的20%。具体分配如下:(1)平时成绩(包括学生的实验态度、实验完成情况等):占实验总成绩的50%;(2)实验报告:占实验总绩的50%。数据结构上机实验编程指南为了更好地帮助同学们做好数据结构实验,在此给出数据结构上机编程的一般思路和程序的基本框架结构。具体程序结构按先后顺序可分为以下3个部分:1预定义常量及类型对于相关的常量与类型(如状态类型)进行定义,如:#define OK

8、1#define ERROR 0#define OVERFLOW 2#define TRUE 1#define FALSE 0typedef int Status;2相关数据结构类型定义此部分包括对所使用的数据结构给出其类型定义及其基本操作函数定义。(具体内容可参见实验一)3主调程序的定义此部分给出相关的主调程序,在此程序中定义相关数据结构变量,并通过调用其操作函数,实现设计目的。(具体内容可参见实验一)实验一 线性表一、实验目的1掌握顺序表及其基本操作的实现;2掌握链表及其基本操作的实现;3掌握利用C编程语言实现数据结构的编程方法;4通过上机实践进一步加深对线性表的顺序存储方式及链式存储方式

9、的理解;5通过上机实践加强利用数据结构解决实际应用应用问题的能力。二、实验要求1实验前做好充分准备,包括复习第一章、第二章所学内容,事先预习好本次实验内容;2实验时记录实验结果,按要求完成各题;3实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。三、实验题目与要求1实验题目一:顺序表的定义及其相关操作算法的实现要求:编程实现顺序表的类型定义及顺序表的初始化操作、插入操作、删除操作、取元素操作、输出操作等,并对其进行验证。2实验题目二:链表的定义及其相关操作算法的实现要求:编程实现单链表(或双向链表、循环链表)的类型定义及其初始化操作、插入操作、删除操作、取元素操作、输出操作等,并对其

10、进行验证。3实验题目三:集合的表示与运算要求:利用题目一或题目二所定义的线性表(顺序表或链表)实现集合的表示及其并、交等运算,并进行验证给出结果。4实验题目四:一元多项式的表示与运算要求:利用线性表(顺序表或链表)实现一元多项的类型定义及其相加等等运算,并进行验证给出结果。说明:(1)实验题目一与实验题目二为必做内容;(2)实验题目三与实验题目四为选做内容。四、实验程序示例本指导书所给出的示例程序均为VC环境下完成的,若使用其它C开发环境,则部分语句要进行少许修改。例如,对于如下的文件包含命令:#include “malloc.h”则在TC3.0环境中需改为:#include “alloc.h

11、”示例1:顺序表的实现#include stdio.h#include malloc.h /-(1)预定义常量及类型-#define OK 1#define ERROR 0#define OVERFLOW -2#define TRUE 1#define FALSE 0typedef int Status; /-(2)顺序表类型及其基本操作函数的定义-#define InitSize 100#define INCR 20typedef int LElemType; /定义元素类型(LElemType)为int类型typedef struct LElemType *Elem;int Length;

12、int ListSize;SqList; /SqList类型为顺序表类型Status InitList_sq(SqList &L) /初始化操作函数定义 L.Elem=(LElemType *)malloc(InitSize*sizeof(LElemType); if (!(L.Elem)return(OVERFLOW); L.Length=0; L.ListSize=InitSize; return OK; Status ListInsert_sq(SqList &L, int i, LElemType e) /插入操作函数定义 int j; if (iL.Length+1) return

13、ERROR; if (L.Length=L.ListSize) L.Elem=( LElemType *)malloc(L.ListSize+INCR)*sizeof(LElemType);if(!(L.Elem) return(OVERFLOW);L.ListSize+=INCR; for(j=L.Length-1;j=i-1;j-) L.Elemj+1=L.Elemj; L.Elemi-1=e; L.Length+; return OK; void ListOutput_sq(SqList L) /顺序表输出操作 int i; for(i=0;i=L.Length-1;i+) printf

14、(%6d,L.Elemi); printf(n);/其它操作如删除、查找、判空等操作略/-(3)主函数定义-void main() SqList La; int i; InitList_sq(La); for (i=0;inext=NULL; return OK; Status ListInsert_l(LinkList &L,int i, LElemType e) /插入操作函数定义 LinkList p,s; int j; p=L;j=0; while(p&jnext;j+; if (!p|ji-1) return ERROR; s=(LinkList)malloc(sizeof(stru

15、ct Lnode); s-data=e; s-next=p-next; p-next=s; return OK; void ListOutput_l(LinkList L) /输出操作函数定义 LinkList p; p=L-next; while(p) printf(%6d,p-data); p=p-next; printf(n); /其它操作如删除、查找、判空等操作略/-(3)主函数定义-void main() int i; LinkList La; InitList_l(La); for (i=0;inext=NULL; p=L; for(i=1;icoef=coef;s-expn=ex

16、pn; s-next=NULL;p-next=s;p=s; void OutputPoly(POLY L) /一元多项式的输出操作 int flag=1; /flag用来是否为第一项的标识 POLY p; p=L-next; while(p) if(flag) printf(%dX%d,p-coef,p-expn); flag=0; else printf(%+dX%d,p-coef,p-expn); p=p-next; printf(n); void AddPoly(POLY La, POLY Lb, POLY &Lc) /一元多项式的相加操作,即实现Lc=La+Lb int x; POLY

17、 pa,pb,pc,s; Lc=(POLY)malloc(sizeof(struct PNode); Lc-next=NULL;pc=Lc; pa=La-next;pb=Lb-next; while(pa&pb) if(pa-expnexpn) s=(POLY)malloc(sizeof(struct PNode); s-coef=pa-coef;s-expn=pa-expn; s-next=NULL;pc-next=s;pc=s; pa=pa-next; else if(pa-expnpb-expn) s=(POLY)malloc(sizeof(struct PNode); s-coef=p

18、b-coef;s-expn=pb-expn; s-next=NULL;pc-next=s;pc=s; pb=pb-next; else x=pa-coef+pb-coef; if(x!=0) s=(POLY)malloc(sizeof(struct PNode); s-coef=x;s-expn=pa-expn; s-next=NULL;pc-next=s;pc=s; pa=pa-next; pb=pb-next; while(pa) s=(POLY)malloc(sizeof(struct PNode); s-coef=pa-coef;s-expn=pa-expn; s-next=NULL;

19、pc-next=s;pc=s; pa=pa-next; while(pb) s=(POLY)malloc(sizeof(struct PNode); s-coef=pb-coef;s-expn=pb-expn; s-next=NULL;pc-next=s;pc=s; pb=pb-next; void main() POLY La,Lb,Lc; int n; printf(Creat Poly La:n); printf(t Input the number of items of La:); scanf(%d,&n); CreatPoly(La,n); printf(nLa(x)=); Out

20、putPoly(La); printf(Creat Poly Lb:n); printf(tInput the number of items of Lb:); scanf(%d,&n); CreatPoly(Lb,n); printf(nLb(x)=); OutputPoly(Lb); AddPoly(La,Lb, Lc); printf(Lc(x)=La(x)+Lb(x)=); OutputPoly(Lc); 实验二 栈与队列一、实验目的1掌握栈的存储实现方式及其基本操作的实现;2掌握队列的存储实现方式及其基本操作的实现;3进一步掌握利用TC实现数据结构的编程方法。二、实验要求1实验前做好

21、充分准备,包括复习第三章所学内容,事先预习好本次实验内容;2实验时记录实验结果,按要求完成各题;3实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。三、实验题目与要求1实验题目一:顺序栈的定义及其操作算法的实现要求:编程实现顺序栈表的类型定义及顺序表的初始化操作、入栈操作、出栈操作、取栈顶元素操作、输出操作等,并对其进行验证。2实验题目二:链式队列的定义及其相关操作算法的实现要求:编程实现链式队列的类型定义及其初始化操作、入队操作、出队操作、取队头操作、输出操作等,并对其进行验证。3实验题目三:循环队列定义及其操作算法的实现要求:编程实现循环队列的类型定义及其初始化操作、入队操作、出

22、队操作、取队头操作、输出操作等,并对其进行验证。4实验题目四:利用栈实现进制转换要求:利用栈(顺序栈或链式栈)实现进制转换问题说明:(1)实验题目一与实验题目三为必做内容。(2)实验题目二与实验题目四为选做内容。四、实验程序示例示例1:顺序栈的定义及其操作算法的实现#include stdio.h#include malloc.h#define OK 1#define ERROR 0#define OVERFLOW -2#define TRUE 1#define FALSE 0typedef int Status; #define STACK_INIT_SIZE 100#define STAC

23、KINCREMENT 20typedef int SElemType; /定义栈内元素类型(SElemType)为int类型typedef struct SElemType *base; SElemType *top; int stackSize;SqStack;Status InitStack(SqStack &S) S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!S.base) exit(overflow); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return

24、OK;Status Push(SqStack &S,SElemType e) if(S.top-S.base=S.stacksize) S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e; return OK; Status Pop(SqStack &S, SElemType &e) /代码略 Status GetTop(SqStack S, SElemType &e) /代码略void StackOutput(SqStack S) int i; for(i=0;iS.Top;i+) printf(%

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1