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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验指导书资料.docx

1、数据结构实验指导书资料数据结构实验指导书计算机专业实验中心2014年9月目 录数据结构上机实验的内容和要求通过上机实验加深对课程内容的理解,增加感性认识,提高程序设计、开发及调试能力。序号实 验名 称内 容提 要每组人数实验时数实验要求实验类别分值(总100分)1线性表的实现及操作(一)顺序表建立、插入、删除等基本操作12必做设计15分2线性表的实现及操作(二)单链表的建立、插入、删除等基本操作12必做设计15分3线性表的应用约瑟夫环问题或者长整数相加的设计与实现12选作综合10分4二叉树的实现及操作二叉树的基本操作:树的建立、前序、中序、后序遍历12必做设计20分5二叉树的应用赫夫曼树12选

2、作综合10分6图的遍历图的遍历:深度优先和广度优先12必做设计20分7图的应用最短路径算法:Dijkstra算法和Floyd算法12选作综合10分8算法性能测试、总结和答疑对实验课涉及到的算法进行性能测试、对实验所遇到的问题进行总结和答疑12本实验指导书适用于16学时数据结构实验课,实验项目具体内容如下:其中,第1、2、4、6实验项目为设计性实验,的其内容为程序代码分析与调试,要求每位同学在每次实验课结束前通过检查。这部分实验应撰写1份实验报告,总分70分。第3、5、7实验项目为综合应用性实验,学生根据自己的兴趣和基础选作。这三个实验要求学生利用所学的理论知识解决实际问题,每一个实验应撰写一份

3、实验报告,每个实验10分。此实验指导书也适用于8学时数据结构实验课,要求完成第1、2、4、6实验项目。实验报告要求请按照实验教师要求,按时提交实验报告电子版文件。实验报告格式可个性化定义,内容包括但不限于以下内容:1、题目、姓名、学号、班级(首页)2、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。3、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。4、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。5、

4、调试分析:(1)调试过程中所遇到的问题及解决方法;(2)算法的时空分析;(3)经验与体会。6、用户使用说明:说明如何使用你设计的程序,详细列出每一步操作步骤。(如果程序操作简单,可略去)7、测试结果:列出对于给定的输入所产生的输出结果。(若有可能,测试随输入规模的增长所用算法的实际运行时间的变化)8、总结实验一、线性表的实现及操作(一)一、实验目的了解和掌握线性表的顺序存储结构;掌握用C语言上机调试线性表的基本方法;掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结构上的运算,以及对相应算法的性能分析。二、实验要求给定一段程序代码,程序代码所完成的功能为:(1

5、)建立一个线性表;(2)依次输入数据元素1,2,3,4,5,6,7,8,9,10;(3)删除数据元素5;(4)依次显示当前线性表中的数据元素。假设该线性表的数据元素个数在最坏情况下不会超过100个,要求使用顺序表。程序中有3处错误的地方,有标识,属于逻辑错误,对照书中的代码仔细分析后,要求同学们修改错误的代码,修改后上机调试得到正确的运行结果。三、程序代码#include #define MaxSize 100 typedef int DataType;typedef struct DataType listMaxSize; int size; SeqList;void ListInitiat

6、e(SeqList *L) /*初始化顺序表L*/ L-size = 0; /*定义初始数据元素个数*/ int ListLength(SeqList L) /*返回顺序表L的当前数据元素个数*/ return L.size;int ListInsert(SeqList *L, int i, DataType x) /*在顺序表L的位置i(0 i size)前插入数据元素值x*/ /*插入成功返回1,插入失败返回0*/ int j; if(L-size = MaxSize) printf(顺序表已满无法插入! n); return 0; else if(i L-size ) printf(参数

7、i不合法! n); return 0; else /此段程序有一处错误 for(j = L-size; j i; j-) L-listj = L-listj; /*为插入做准备*/ L-listi = x; /*插入*/ L-size +; /*元素个数加1*/ return 1; int ListDelete(SeqList *L, int i, DataType *x) /*删除顺序表L中位置i(0 i size - 1)的数据元素值并存放到参数x中*/*删除成功返回1,删除失败返回0*/ int j; if(L-size = 0) printf(顺序表已空无数据元素可删! n); ret

8、urn 0; else if(i L-size-1) printf(参数i不合法); return 0; else /此段程序有一处错误 *x = L-listi; /*保存删除的元素到参数x中*/ for(j = i +1; j size-1; j+) L-listj = L-listj-1; /*依次前移*/ L-size-; /*数据元素个数减1*/ return 1; int ListGet(SeqList L, int i, DataType *x)/*取顺序表L中第i个数据元素的值存于x中,成功则返回1,失败返回0*/ if(i L.size-1) printf(参数i不合法! n

9、); return 0; else *x = L.listi; return 1; void main(void) SeqList myList; int i , x; ListInitiate(&myList); for(i = 0; i 10; i+) ListInsert(&myList, i, i+1); ListDelete(&myList, 4, &x); for(i = 0; i ListLength(myList); i+) ListGet( , i, &x); /此段程序有一处错误 printf(%d , x); 实验二、线性表的实现及操作(二)一、实验目的了解和掌握线性表的

10、链式存储结构;掌握用C语言上机调试线性表的基本方法;掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结构上的运算,以及对相应算法的性能分析。二、实验要求给定一段程序代码,程序代码所完成的功能为:(1)建立一个线性表;(2)依次输入数据元素1,2,3,4,5,6,7,8,9,10;(3)删除数据元素5;(4)依次显示当前线性表中的数据元素。假设该线性表的数据元素个数在最坏情况下不会超过100个,要求使用单链表。程序中有3处错误的地方,有标识,属于逻辑错误,对照书中的代码仔细分析后,要求同学们修改错误的代码,上机调试并得到正确的运行结果。三、程序代码:#inclu

11、de /*该文件包含pringtf()等函数*/#include /*该文件包含exit()等函数*/#include /*该文件包含malloc()等函数*/typedef int DataType; /*定义DataType为int*/typedef struct Node DataType data; struct Node *next; SLNode;void ListInitiate(SLNode *head) /*初始化*/ /*如果有内存空间,申请头结点空间并使头指针head指向头结点*/ if(*head = (SLNode *)malloc(sizeof(SLNode) =

12、NULL) exit(1); (*head)-next = NULL; /*置链尾标记NULL */int ListLength(SLNode *head) SLNode *p = head; /*p指向首元结点*/ int size = 0; /*size初始为0*/ while(p-next != NULL) /*循环计数*/ p = p-next; size +; return size;int ListInsert(SLNode *head, int i, DataType x)/*在带头结点的单链表head的数据元素ai(0 i size)结点前*/*插入一个存放数据元素x的结点*/

13、 SLNode *p, *q; int j; p = head; /*p指向首元结点*/ j = -1; /*j初始为-1*/ while(p-next != NULL & j next; j+; if(j != i - 1) printf(插入位置参数错!); return 0; /*生成新结点由指针q指示*/ if(q = (SLNode *)malloc(sizeof(SLNode) = NULL) exit(1); q-data = x;/此段程序有一处错误 p-next = q-next; /*给指针q-next赋值*/ p-next = q; /*给指针p-next重新赋值*/ r

14、eturn 1;int ListDelete(SLNode *head, int i, DataType *x)/*删除带头结点的单链表head的数据元素ai(0 i size - 1)结点*/*删除结点的数据元素域值由x带回。删除成功时返回1;失败返回0*/ SLNode *p, *s; int j; p = head; /*p指向首元结点*/ j = -1; /*j初始为-1*/ while(p-next != NULL & p-next-next!= NULL & j next; j+; if(j != i - 1) printf(插入位置参数错!); return 0; /此段程序有一

15、处错误 s = p-next; /*指针s指向数据元素ai结点*/ *x = s-data; /*把指针s所指结点的数据元素域值赋予x*/ p-next = s-next; /*把数据元素ai结点从单链表中删除指*/ free(s); /*释放指针s所指结点的内存空间*/ return 1;int ListGet(SLNode *head, int i, DataType *x)/*取数据元素ai和删除函数类同,只是不删除数据元素ai结点*/ SLNode *p; int j; p = head; j = -1; while(p-next != NULL & j next; j+; if(j

16、!= i) printf(取元素位置参数错!); return 0; /此段程序有一处错误 *x = p-next; return 1;void Destroy(SLNode *head) SLNode *p, *p1; p = *head; while(p != NULL) p1 = p; p = p-next; free(p1); *head = NULL;void main(void) SLNode *head; int i , x; ListInitiate(&head); /*初始化*/ for(i = 0; i 10; i+) if(ListInsert(head, i, i+1)

17、 = 0) /*插入10个数据元素*/ printf(错误! n); return; if(ListDelete(head, 4, &x) = 0) /*删除数据元素5*/ printf(错误! n); return; for(i = 0; i ListLength(head); i+) if(ListGet(head, i, &x) = 0) /*取元素*/ printf(错误! n); return; else printf(%d , x); /*显示数据元素*/ Destroy(&head);实验三、线性表的应用一、实验目的加深对线性表各项操作实现的理解,增强学生问题模拟、数据抽象的能力

18、。二、实验要求本实验共有两个题目,作为实验一和实验二的拓展题目,可选作其中一个或者两个都做。选取根据题目要求进行设计,并编程实现,在实验报告中给出测试数据。三、实验内容1、约瑟夫环问题的设计与实现据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第

19、一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决?Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。问题:假设41个人围成一圈,其中有m个你的朋友不想死掉,从第一个开始报数,第3个将被杀掉。为了保护自己和m个朋友,现在编写程序,求出如何安排自己和m个朋友的初始位置。2、长整数表示与相加很长整数是指无法用long型数存储的数,因此需要用字符串数组来存储两个被加数,相加的结果也保存于字符数组

20、中,假如被加数长度不超过十进制40位,请编程实现该加法程序并将相加结果输出。四、实验报告要求1、基本要求见第3页。2、给出实验结果。3、对算法的性能进行测试。要求分析算法的复杂度,测试程序对于不同大小输入的运行情况(例如约瑟夫环,改变人数个数为50,100,1000等,测试其是否正常运行,比较运行时间等)。实验四、二叉树的实现及操作一、实验目的掌握二叉树的定义、结构特征,以及各种存储结构的特点及使用范围,各种遍历算法。掌握用指针类型描述、访问和处理二叉树的运算。二、实验内容及要求有如下二叉树:程序代码给出了该二叉树的链式存储结构的建立、前序、中序、后序遍历的算法,同时也给出了查询“E”是否在二

21、叉树里的代码。代码有四处错误,有标识,属于逻辑错误,对照书中的代码仔细分析后,请修改了在电脑里运行,该实验无需写实验报告,程序能完全执行得满分。改对一处得总分的四分之一。#include #include typedef char DataType;typedef struct Node DataType data; /*数据域*/ struct Node *leftChild; /*左子树指针*/ struct Node *rightChild; /*右子树指针*/BiTreeNode; /*结点的结构体定义*/*初始化创建二叉树的头结点*/void Initiate(BiTreeNode

22、*root) *root = (BiTreeNode *)malloc(sizeof(BiTreeNode); (*root)-leftChild = NULL; (*root)-rightChild = NULL;void Destroy(BiTreeNode *root) if(*root) != NULL & (*root)-leftChild != NULL) Destroy(&(*root)-leftChild); if(*root) != NULL & (*root)-rightChild != NULL) Destroy(&(*root)-rightChild); free(*r

23、oot);/*若当前结点curr非空,在curr的左子树插入元素值为x的新结点*/*原curr所指结点的左子树成为新插入结点的左子树*/*若插入成功返回新插入结点的指针,否则返回空指针*/BiTreeNode *InsertLeftNode(BiTreeNode *curr, DataType x) BiTreeNode *s, *t; if(curr = NULL) return NULL; t = curr-leftChild; /*保存原curr所指结点的左子树指针*/ s = (BiTreeNode *)malloc(sizeof(BiTreeNode); s-data = x; s-

24、leftChild = t; /*新插入结点的左子树为原curr的左子树*/ s-rightChild = NULL; curr-leftChild = s; /*新结点成为curr的左子树*/ return curr-leftChild; /*返回新插入结点的指针*/*若当前结点curr非空,在curr的右子树插入元素值为x的新结点*/*原curr所指结点的右子树成为新插入结点的右子树*/*若插入成功返回新插入结点的指针,否则返回空指针*/BiTreeNode *InsertRightNode(BiTreeNode *curr, DataType x) BiTreeNode *s, *t;

25、if(curr = NULL) return NULL; t = curr-rightChild; /*保存原curr所指结点的右子树指针*/ s = (BiTreeNode *)malloc(sizeof(BiTreeNode); s-data = x; s-rightChild = t; /*新插入结点的右子树为原curr的右子树*/ s-leftChild = NULL; curr-rightChild = s; /*新结点成为curr的右子树*/ return curr-rightChild; /*返回新插入结点的指针*/void PreOrder(BiTreeNode *t, voi

26、d visit(DataType item)/使用visit(item)函数前序遍历二叉树t if(t != NULL) /此小段有一处错误 visit(t-data); PreOrder(t- rightChild, visit); PreOrder(t- leftChild, visit); void InOrder(BiTreeNode *t, void visit(DataType item)/使用visit(item)函数中序遍历二叉树t if(t != NULL) /此小段有一处错误 InOrder(t-leftChild, visit); InOrder(t-rightChild

27、, visit); visit(t-data); void PostOrder(BiTreeNode *t, void visit(DataType item)/使用visit(item)函数后序遍历二叉树t if(t != NULL) /此小段有一处错误 visit(t-data); PostOrder(t-leftChild, visit); PostOrder(t-rightChild, visit); void Visit(DataType item) printf(%c , item);BiTreeNode *Search(BiTreeNode *root, DataType x)/需找元素x是否在二叉树中 BiTreeNode *find=NULL; if(root!=NULL) if(root-data=x) find=root;

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

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