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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验指导书C版.docx

1、数据结构实验指导书C版数据结构实验指导书(C版)数据结构实验指导书(C语言版)2017年9月1、顺序表的实现1. 实验目的 掌握线性表的顺序存储结构; 验证顺序表及其基本操作的实现; 理解算法与程序的关系,能够将顺序表算法转换为对应的程序。2. 实验内容 建立含有若干个元素的顺序表; 对已建立的顺序表实现插入、删除、查找等基本操作。3. 实现提示定义顺序表的数据类型顺序表结构体SeqList,在SeqList基础上实现题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。简单起见,本实验假定线性表的数据元素为int型,要求学生:(1)将实验程序调试通过

2、后,用模板类改写;(2)加入求线性表的长度等基本操作;(3)重新给定测试数据,验证抛出异常机制。4. 实验程序在编程环境下新建一个工程“顺序表验证实验”,并新建相应文件,文件包括顺序表结构体SeqList的定义,范例程序如下:#define MaxSize 100 /*假设顺序表最多存放100个元素*/typedef int DataType; /*定义线性表的数据类型,假设为int型*/typedef struct DataType dataMaxSize; /*存放数据元素的数组*/ int length; /*线性表的长度*/ SeqList;文件包括建立顺序表、遍历顺序表、按值查找、插

3、入操作、删除操作成员函数的定义,范例程序如下:int CreatList(SeqList *L, DataType a , int n) if (n MaxSize) printf(顺序表的空间不够,无法建立顺序表n); return 0; for (int i = 0; i datai = ai;L-length = n;return 1;void PrintList(SeqList *L) for (int i = 0; i length; i+) printf(%d , L-datai); /*输出线性表的元素值,假设为int型*/ int Locate(SeqList *L, Data

4、Type x)for (int i = 0; i length; i+)if (L-datai = x) return i+1; /*返回序号*/return 0; /*退出循环,说明查找失败*/int Insert(SeqList *L, int i, DataType x) if (L-length = MaxSize) printf(上溢错误,插入失败n); return 0;if (i L-length + 1) printf(位置错误,插入失败n); return 0;for (int j = L-length; j = i; j-) /*j表示元素序号*/L-dataj = L-d

5、ataj - 1; L-datai - 1 = x;L-length+;return 1;int Delete(SeqList *L, int i, DataType *ptr)if (L-length = 0) printf(下溢错误,删除失败n); return 0; if (i L-length) printf(位置错误,删除失败n); return 0; *ptr = L-datai - 1; /*取出位置i的元素*/ for (int j = i; j length; j+) /* j表示元素所在数组下标*/ L-dataj - 1 = L-dataj; L-length-; ret

6、urn 1;在定义了顺序表的存储结构SeqList并实现了基本操作后,程序中就可以使用SeqList类型来定义变量,可以调用实现基本操作的函数来完成相应的功能。范例程序如下:#include #include /*将顺序表的存储结构定义和各个函数定义放到这里*/int main( ) int r5 = 1, 2, 3, 4, 5, i, x; SeqList L; /*定义变量L为顺序表类型*/ Creat(&L, r, 5); /*建立具有5个元素的顺序表*/ printf(当前线性表的数据为:); PrintList(&L); /*输出当前线性表1 2 3 4 5*/ Insert(&L,

7、 2, 8); /*在第2个位置插入值为8的元素*/printf(执行插入操作后数据为:); PrintList(&L); /*输出插入后的线性表1 8 2 3 4 5*/ printf(当前线性表的长度为:%dn, Length(&L); /*输出线性表的长度6*/ printf(请输入查找的元素值:); scanf(%d, &x); i = Locate(&L, x); if (0 = i) printf(查找失败n); else printf(元素%d的位置为:%dn, x, i); printf(请输入查找第几个元素值:, &i); scanf(%d, &i); if (Get(&L,

8、 i, &x) = 1) printf(第%d个元素值是%dn, i, x); else printf(线性表中没有第%d个元素n, i); printf(请输入要删除第几个元素:); scanf(%d, &i); if (Delete(&L, i, &x) = 1) /*删除第i个元素*/ printf(删除第%d个元素是%d,删除后数据为:, i, x);PrintList(&L); /*输出删除后的线性表*/ else printf(删除操作失败n);return 0;2、链栈的实现1. 实验目的 掌握栈的链接存储结构; 验证链栈及其基本操作的实现; 验证栈的操作特性。2. 实验内容 建

9、立一个空栈; 对已建立的栈进行插入、删除、取栈顶元素等基本操作。3. 实现提示定义链栈中的结点结构(链栈中结点结构基于单链表相同),定义链栈的数据类型链栈结构体,包括入栈、出栈、取栈顶元素等基本操作。本节的实验采用模板实现,要求学生:(1)假设栈元素为字符型,修改主函数;(2)重新设计测试数据,考查栈的上溢、下溢等情况,修改主函数。4. 实验程序在编程环境下新建一个工程“链栈验证实验”,并新建相应文件,文件包括链栈结构体的定义,范例程序如下:typedef int DataType; /*栈元素的数据类型,假设为int型*/typedef struct Node DataType data;

10、/*存放栈元素的数据域*/ struct Node *next; /*存放下一个结点的地址*/ Node; Node *top; /*栈顶指针*/文件包括链栈初始化、入栈、出栈、获取栈顶元素、判空操作成员函数的定义,范例程序如下:void InitStack(Node *top)top = NULL;void Push(Node *top, DataType x)Node *s = (Node *)malloc(sizeof(Node); /*申请一个结点s*/s-data = x; s-next = top; top = s; /*将结点s插在栈顶*/int Pop(Node *top, D

11、ataType *ptr) Node *p = top;if (top = NULL) printf(下溢错误,删除失败n); return 0; *ptr = top-data; /*存储栈顶元素*/ top = top-next; /*将栈顶结点摘链*/ free(p); return 1;int GetTop(Node *top, DataType *ptr)if (top = NULL) printf(下溢错误,取栈顶失败n); return 0; *ptr = top-data; return 1;int Empty(Node *top)if (top = NULL) return

12、1; /*栈空则返回1*/else return 0;在定义了链栈的存储结构并实现了基本操作后,可以调用实现基本操作的函数来完成相应的功能。范例程序如下:#include #include #include /*将单链表的结点结构定义和链栈的各个函数定义放到这里*/int main( ) DataType x;Node *top = NULL; /*定义链栈的栈顶指针并初始化*/InitStack(top); /*初始化链栈*/ printf(对15和10执行入栈操作,);Push(top, 15);Push(top, 10); if (GetTop(top, &x) = 1)printf(当

13、前栈顶元素为:%dn, x); /*输出当前栈顶元素10*/ if (Pop(top, &x) = 1) printf(执行一次出栈操作,删除元素:%dn , x); /*输出出栈元素10*/if (GetTop(top, &x) = 1) printf(当前栈顶元素为:%dn, x); /*输出当前栈顶元素15*/ printf(请输入待插入元素:); scanf(%d, &x);Push(&S, x);if (Empty(top) = 1) printf(栈为空n);else printf(栈非空n); /*栈有2个元素,输出栈非空*/ DestroyStack(top);return 0

14、;3、前序遍历二叉树1. 实验目的 掌握二叉树的逻辑结构; 掌握二叉树的二叉链表存储结构; 验证二叉树的二叉链表存储及遍历操作。2. 实验内容 建立一棵含有n个结点的二叉树,采用二叉链表存储; 输出前序遍历该二叉树的遍历结果。3. 实现提示定义二叉树的数据类型二叉树结点结构体BiNode,在BiNode基础上实现题目要求的建立二叉链表、前序遍历等基本操作。建立二叉链表可以采用扩展二叉树的一个遍历序列,例如前序序列,将扩展二叉树的前序序列由键盘输入,建立该二叉树的二叉链表存储。简单起见,本实验假定二叉树的数据元素为char型,要求学生:(1)将实验程序调试通过后,用模板类改写;(2)加入层序遍历

15、二叉树等基本操作。4. 实验程序在编程环境下新建一个工程“二叉链表验证实验”,并新建相应文件,文件包括二叉树结构体的定义,范例程序如下:typedef char DataType; typedef struct BiNode DataType data; struct BiNode *lchild, *rchild; BiNode;BiNode *root;文件包括建立二叉链表、前序遍历操作成员函数的定义,范例程序如下:BiNode * CreatBiTree(BiNode *root)char ch;cin ch; /*输入结点的数据信息*if (ch = # ) root = NULL;

16、/*递归结束,建立一棵空树*/else root = (BiNode *)malloc(sizeof(BiNode); /*生成新结点*/ root-data = ch; /*新结点的数据域为ch*/ root-lchild = Creat(root-lchild); /*递归建立左子树*/ root-rchild = Creat(root-rchild); /*递归建立右子树*/return root;void PreOrder(BiNode *root) if (root = NULL) return; /*递归调用的结束条件*/else printf(%c , root-data); /

17、*访问根结点的数据域,为char型*/ PreOrder(root-lchild); /*前序递归遍历root的左子树*/PreOrder(root-rchild); /*前序递归遍历root的右子树*/ 在定义了二叉树的存储结构并实现了基本操作后,可以调用实现基本操作的函数来完成相应的功能。范例程序如下:#include #include #include /*将二叉链表的结点结构定义和各个函数定义放到这里*/int main( ) BiNode *root = NULL; /*定义二叉树的根指针变量*/ root = CreatBiTree(root); /*建立一棵二叉树*/ print

18、f(该二叉树的根结点是:%cn, root-data);printf(n该二叉树的前序遍历序列是:); PreOrder(root); return 0;4、图的深度优先遍历算法1. 实验目的 掌握图的逻辑结构; 掌握图的邻接矩阵存储结构; 验证图的邻接矩阵存储及其深度优先遍历操作的实现。2. 实验内容 建立无向图的邻接矩阵存储; 对建立的无向图,进行深度优先遍历;3. 实现提示定义邻接矩阵存储的无向图结构体MGraph,在其基础上实现题目要求的图建立、深度优先遍历等基本操作。4. 实验程序在编程环境下新建一个工程“图的深度优先遍历验证实验”,并新建相应文件,文件包括图的邻接矩阵结构体MGra

19、ph的定义,范例程序如下:#define MaxSize 10 /*假设图中最多顶点个数*/typedef char DataType; /*图中顶点的数据类型,假设为char型*/typedef struct /*定义邻接矩阵存储结构*/ DataType vertexMaxSize; /*存放顶点的一维数组*/ int edgeMaxSizeMaxSize; /*存放边的二维数组*/ int vertexNum, edgeNum; /*图的顶点数和边数*/ MGraph;文件包括建立图、图的深度优先遍历操作成员函数的定义,范例程序如下:void CreatGraph(MGraph *G,

20、DataType a , int n, int e) int i, j, k;G-vertexNum = n; G-edgeNum = e;for (i = 0; i vertexNum; i+) /*存储顶点信息*/G-vertexi = ai;for (i = 0; i vertexNum; i+) /*初始化邻接矩阵*/ for (j = 0; j vertexNum; j+) G-edgeij = 0; for (k = 0; k edgeNum; k+) /*依次输入每一条边*/scanf(%d%d, &i, &j); /*输入边依附的顶点编号*/G-edgeij = 1; G-ed

21、geji = 1; /*置有边标志*/ void DFraverse(MGraph *G, int v) /*全局数组变量visitedn已初始化为0*/printf(%c , G-vertexv); visitedv = 1;for (int j = 0; j vertexNum; j+)if (G-edgevj = 1 & visitedj = 0) DFSTraverse(G, j); 在定义了图的邻接矩阵存储结构并实现了基本操作后,可以调用实现基本操作的函数来完成相应的功能。范例程序如下:#include #include int visitedMaxSize=0; /*全局数组变量v

22、isited初始化*/*把邻接矩阵的存储结构定义和各个函数定义放到这里*/int main( ) int i;char ch =A,B,C,D,E; MGraph MG;CreatGraph(&MG, ch, 5, 6); /*建立具有5个顶点6条边的无向图*/ for (i = 0; i MaxSize; i+) visitedi = 0; printf(深度优先遍历序列是:); DFTraverse(&MG, 0); /*从顶点0出发进行深度优先遍历*/ return 0;5、散列查找1. 实验目的 掌握散列查找的基本思想; 掌握闭散列表的构造方法; 掌握线性探测处理冲突的方法; 验证散列

23、技术的查找性能。2. 实验内容 对于给定的一组整数和散列函数,采用线性探测法处理冲突构造散列表; 设计查找算法,验证查找性能。3. 实现提示 首先将待查找集合存储到闭散列表ht中,然后随机生成待查元素的下标,考查在查找成功情况下的比较次数。4. 实验程序由于程序比较简单,使用单文件结构即可。新建文件“散列查找”,注意从下标0开始存放待查找元素,范例程序如下:int HashSearch1(int ht , int m, int k, int *p) /*形参p传指针,返回位置*/ int i, j, flag = 0; /*flag=0表示散列表未满*/j = H(k); /*计算散列地址*/i = j; /*记载比较的起始位置*/while (hti != 0 & flag = 0)if (hti = k) /*比较若干次查找成功*/*p = i; return 1; else i = (i + 1) % m; /*向后探测一个位置*/if (i = j) flag = 1; /*表已满*/if (flag = 1) printf(溢出); exit(-1); /*表满,产生溢出*/ else /*比较若干次查找不成功,插入*/hti = k; *p = i; return 0;

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

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