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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验指导书.docx

1、数据结构实验指导书数据结构实验指导书计算机专业实验中心 编2020年7月29日数据结构上机实验内容和要求通过上机实验加深对课程内容的理解,增加感性认识,提高程序设计、开发及调试能力。序号实 验名 称内 容提 要每组人数实验时数实验要求实验类别分值(总100分)1顺序表的实现及应用掌握顺序表结构,实现其插入、删除等算法。利用顺序表将两个有序线性表合并为一个有序表。12必做设计10分2链表的实现及应用掌握单链表结构,实现其插入、删除、查找等算法。利用单链表将两个有序链表合并为一个有序链表。12必做设计10分3栈的实现及应用掌握栈的结构,将栈应用于表达式计算问题12必做设计15分4队列的实现及应用掌

2、握队列的结构,将队列应用于模拟服务台前的排队现象问题12必做设计15分5二叉树操作及应用掌握二叉树的存储,实现三种遍历的递归算法、实现前序或中序的非递归遍历算法12必做设计15分6图的遍历操作及应用实现图的存储、深度遍历和广度遍历算法12必做设计10分7查找算法的实现实现顺序表的二分查找算法12必做设计10分8排序算法的实现实现直接插入排序、快速排序等算法12必做设计15分本实验指导书适用于16学时数据结构实验课,实验项目具体内容如下:实验报告要求请按照实验教师要求,按时提交实验报告电子版文件。实验报告格式可个性化定义,内容包括但不限于以下内容:1、 题目、姓名、学号、班级(首页)2、 需求分

3、析:陈述程序设计的任务,强调程序要做什么,明确规定:(1) 输入的形式和输出值的范围;(2) 输出的形式;(3) 程序所能达到的功能;(4) 测试数据:包括正确的输入输出结果和错误的输入及输出结果。3、 概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。4、 详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。5、 调试分析:(1) 调试过程中所遇到的问题及解决方法;(2) 算法的时空分析;(3) 经验与体会。6、 用户使用说明:说明如何使用你设计的程序,详细列出每一步操作步骤。(如果程序操作简单,可略去)7、 测试结果:列出对于给定的输入所产生的输出结果

4、。(若有可能,测试随输入规模的增长所用算法的实际运行时间的变化)8、总结实验一、顺序表的实现及应用一、实验目的了解和掌握线性表的顺序存储结构;掌握用C语言上机调试线性表的基本方法;掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结构上的运算,以及对相应算法的性能分析。二、实验要求给定一段程序代码,程序代码所完成的功能为:(1)建立一个线性表;(2)依次输入数据元素1,2,3,4,5,6,7,8,9,10;(3)删除数据元素5;(4)依次显示当前线性表中的数据元素。假设该线性表的数据元素个数在最坏情况下不会超过100个,要求使用顺序表。程序中有3处错误的地方,有

5、标识,属于逻辑错误,对照书中的代码仔细分析后,要求同学们修改错误的代码,修改后上机调试得到正确的运行结果。三、程序代码#include #define MaxSize 100typedef int DataType;typedef structDataType listMaxSize;int size; SeqList;void ListInitiate(SeqList *L)/*初始化顺序表L*/L-size = 0;/*定义初始数据元素个数*/ int ListLength(SeqList L)/*返回顺序表L的当前数据元素个数*/return ;int ListInsert(SeqLis

6、t *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(参数i不合法! n);return 0;else 正上述程序中的错误(必作)。2.编写合并函数,将两个有序线性表合并为一个有序表并在主函数中加以测试(选作)。3.完成实验报告的撰写。实验二、链表的实现及应用一、实验目的了解和掌握线性表的链式存储结构;掌握用C语言上机调试线性表的基本方

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

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

9、LL;/*置链尾标记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的结点*/SLNode *p, *q;int j;p = head;

10、/*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;正上述程序中的错误(必作)。2.编写合并函数,将两个有序的单链表合并成一个有序单链表(选作)。3.完成实验报告的撰写。实验三、栈的实现及应用一、实验目的1.掌握栈的存储表示和实现2.掌握栈的基本操作实现。3.掌握栈在解决实际问题中的应用

11、。二、实验要求问题描述:编写程序实现算术表达式的求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。主要功能描述如下:1、从键盘上输入表达式。2、分析该表达式是否合法。3、若上述处理过程中没有发现错误,则认为该表达式合法,计算并打印处理结果。三、主要功能函数参考程序中主要包含下面几个功能函数:void initstack():初始化堆栈 int Make_str():语法检查 int push_operate(int operate):将操作码压入堆栈 int push_num(double num):将操作数压入堆栈 int procede(int operate):处理操作码

12、 int change_opnd(int operate):将字符型操作码转换成优先级int push_opnd(int operate):将操作码压入堆栈 int pop_opnd():将操作码弹出堆栈 int caculate(int cur_opnd):简单计算+,-,*,/ double pop_num():弹出操作数四、实验任务认真阅读与理解实验内容的具体要求,参考教材相关章节,结合实验内容的要求,编写实验程序并上机调试与测试,完成实验报告的撰写。实验四、队列的实现及应用一、实验目的1.掌握队列的存储表示和实现。2.掌握队列的基本操作实现。3.掌握队列在解决实际问题中的应用。二、实验

13、要求利用队列模拟服务台前的排队现象问题。问题描述:某银行有一个客户办理业务站,在单位时间内随机地有客户到达,设每位客户的业务办理时间是某个范围的随机值。设只有一个窗口,一位业务人员,要求程序模拟统计在设定时间内,业务人员的总空闲时间和客户的平均等待时间。假定模拟数据已按客户到达的先后顺序依次存于某个文本数据文件中,对应每位客户有两个数据:到达时间和需要办理业务的时间。三、实验任务认真阅读与理解实验内容的具体要求,参考教材相关章节,结合实验内容的要求,编写实验程序并上机调试与测试,完成实验报告的撰写。实验五、二叉树操作及应用一、 实验目的掌握二叉树的定义、结构特征,以及各种存储结构的特点及使用范

14、围,各种遍历算法。掌握用指针类型描述、访问和处理二叉树的运算。掌握前序或中序的非递归遍历算法。二、 实验要求有如下二叉树:程序代码给出了该二叉树的链式存储结构的建立、前序、中序、后序遍历的算法,同时也给出了查询“E”是否在二叉树里的代码。代码有三处错误,有标识,属于逻辑错误,对照书中的代码仔细分析后,请修改了在电脑里运行。#include #include typedef char DataType;typedef struct Node DataType data;/*数据域*/struct Node *leftChild;/*左子树指针*/struct Node *rightChild;/

15、*右子树指针*/BiTreeNode;/*结点的结构体定义*/*初始化创建二叉树的头结点*/void Initiate(BiTreeNode *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 &

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

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

18、(BiTreeNode *curr, DataType x)BiTreeNode *s, *t;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;/*返回新插入结点

19、的指针*/void PreOrder(BiTreeNode *t, void visit(DataType item)正程序错误(必作)。2.编写二叉树的前序(或中序)的非递归遍历算法并进行测试(选作)。3.完成实验报告的撰写。实验六、图的遍历操作及应用一、实验目的掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS及BFS对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。三、 实验要求采用邻接矩阵和邻接链表作为图的存储结构,完成有向图和无向图的DFS和BFS操作。本实验给出了示例程序,其中共有4处错误,错误段均有标识,属于逻辑错误。请认真理解程序,修改程序代

20、码,并在电脑上调试运行。四、 DFS和BFS 的基本思想深度优先搜索法DFS的基本思想:从图G中某个顶点Vo出发,首先访问Vo,然后选择一个与Vo相邻且没被访问过的顶点Vi访问,再从Vi出发选择一个与Vi相邻且没被访问过的顶点Vj访问,依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则回退到已被访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点W,从W出发按同样方法向前遍历。直到图中所有的顶点都被访问。广度优先算法BFS的基本思想:从图G中某个顶点Vo出发,首先访问Vo,然后访问与Vo相邻的所有未被访问过的顶点V1,V2,Vt;再依次访问与V1,V2,Vt相邻的起且未被访问过的的所

21、有顶点。如此继续,直到访问完图中的所有顶点。五、 示例程序1 邻接矩阵作为存储结构的程序示例#include#include#define MaxVertexNum 100 ertex=a; irstedge=NULL; irstedge;G-adjlisti.firstedge=s; irstedge; G-adjlistj.firstedge=s; ertex); irstedge; ertex); irstedge; ertex); n-1中查找关键字为k的记录,成功时返回找到的记录位置,失败时返回-1,具体的算法如下所示:int SeqSearch(SeqList R,int n,Ke

22、yType k)int i=0;while(i=n)return -1;else printf(%d,Ri.key);return i;2、二分查找,在有序表R0.n-1中进行二分查找,成功时返回记录的位置,失败时返回-1,具体的算法如下:int BinSearch(SeqList R,int n,KeyType k)int low=0,high=n-1,mid,count=0;while(lowk)high=mid-1;elselow=mid+1;return -1;四、实验任务认真阅读与理解实验内容的具体要求,参考教材相关章节,编写实验程序并上机调试与测试,完成实验报告的撰写。实验八、排序

23、算法的实现一、实验目的1. 掌握常用的排序方法,并掌握用高级语言实现排序算法的方法;2. 深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用;3. 了解各种方法的排序过程及其时间复杂度的分析方法。二、实验要求统计成绩:给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法: (1) 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次; (2) 按名次列出每个学生的姓名与分数。三、实验步骤1.定义结构体。Typedef struct student char name8; int score; 2.定义结构体数组。3.编写主程序,对数据进行排序。4.要求至少采用两种排序算法实现,如直接插入排序、快速排序等算法。四、实验任务认真阅读与理解实验内容的具体要求,参考教材相关章节,编写实验程序并上机调试与测试,完成实验报告的撰写。

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

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