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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

第五次大数据结构上机实验报告材料.docx

1、第五次大数据结构上机实验报告材料一、调试成功程序及说明1、题目: 1编程实现书P156 ADT Graph 基本操作13个,用邻接矩阵存储结构实现;算法思想:以邻接矩阵的形式实现操作源程序:#define INFINITY INT_MAX /最大值为无穷大#define MAX_VERTEX_NUM 20 /最大顶点个数#includeusing namespace std;typedef enum DG,DN,AG,ANGraphKind; /有向图,有向网,无向图,无向网typedef int Status;typedef int VRType;typedef char InfoType;

2、typedef struct ArcCell VRType adj; /表示顶点关系,对于无向图有向图用0和1表示是否相邻,对于有向图有向网用权值类型表示 InfoType* info; /该弧相关信息的指针ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct /点的值 char name; char* data;VertexTypeMAX_VERTEX_NUM; typedef struct VertexType vexs; /顶点向量 AdjMatrix arcs; /邻接矩阵 int vexnum; /图的当前顶点数 i

3、nt arcnum; /图的当前弧数 GraphKind kind; /图的种类标志MGraph;/*以下操作默认是无向网,即Kind = AG*/*顶点是名称字母。书上的是数字,例如v*Status LocateVex(MGraph G,char u) if(G.vexnum = 0) return -1; /图不存在 int i; for(i = 0;i G.vexnum;i+) if(G.vexsi.name = u) return i; return -2; /图中不存在与u相等的点Status CreateGraph(MGraph& G) int i,j,k; VRType w; c

4、har v1,v2; char data50; cout 你想要创建几个顶点? G.vexnum; cout 你想要创建几条弧? G.arcnum; cout 依次输入顶点名称: endl; for(i = 0;i G.vexsi.name; /构造顶点向量 for(i = 0;i G.vexnum;i+) for(j = 0;j G.vexnum;j+) G.arcsij.adj = INFINITY; /初始化邻接矩阵 G.arcsij.info = NULL; for(k = 0;k G.arcnum;k+) /构造邻接矩阵 cout v1 v2; cout 输入这条边的权值: w; c

5、out 输入这条边的信息: data; i = LocateVex(G,v1); j = LocateVex(G,v2); G.arcsij.adj = w; G.arcsij.info = data; G.arcsji = G.arcsij; return 1;Status DestroyGraph(MGraph& G) G.vexnum = NULL; G.arcnum = NULL; return 1;char* GetVex(MGraph G,char v) if(G.vexnum = 0) return NULL; int i; i = LocateVex(G,v); if(i =

6、0) /判断是否是图上的顶点,后面的函数省略了这一步 return G.vexsi.data; else return NULL;Status PutVex(MGraph& G,char v,char* value) if(G.vexnum = 0) return 0; int i; i = LocateVex(G,v); G.vexsi.data = value; return 1;/VertexType FirstAdjVex(MGraph G,char v) /返回第一个邻接顶点,邻接表操作/VertexType NextAdjVex(MGraph G,char v,char w) /邻

7、接表操作Status InsertVex(MGraph& G,char v) if(G.vexnum = 0) return 0; int i; G.vexsG.vexnum.name = v; G.vexnum+; for(i = 0;i G.vexnum;i+) G.arcsiG.vexnum - 1.adj = INFINITY; G.arcsG.vexnum - 1i.adj = INFINITY; return 1;Status DeleteVex(MGraph& G,char v) if(G.vexnum = 0) return 0; int i,j,k; k = LocateVe

8、x(G,v); for(i = 0,j = 0;i G.vexnum;i+) if(G.arcsik.adj != INFINITY) j+; for(i = k;i data = NULL; G.vexnum-; G.arcnum = G.arcnum - j; return 1;Status InsertArc(MGraph& G,char v,char w) if(G.vexnum = 0) return 0; int i,j; VRType q; char data50; i = LocateVex(G,v); j = LocateVex(G,w); cout 输入这条边的权值: q;

9、 cout 输入这条边的信息: data; G.arcsij.adj = q; G.arcsij.info = data; G.arcsji = G.arcsij; G.arcnum = G.arcnum + 2; return 1;Status DeleteArc(MGraph& G,char v,char w) if(G.vexnum = 0) return 0; int i,j; i = LocateVex(G,v); j = LocateVex(G,w); G.arcsij.adj = INFINITY; G.arcsij.info = NULL; G.arcsji = G.arcsi

10、j; G.arcnum = G.arcnum - 2; return 1;Status Print(MGraph G) int i,j; for(i = 0;i G.vexnum ;i+) for(j = 0;j G.vexnum ;j+) cout G.arcs ij.adj ; cout endl; return 1;int main() int j; char i,c,d; MGraph G; CreateGraph(G); cout 此时矩阵为: endl; Print(G); cout i; j = LocateVex(G,i); cout i为第 j+1 个顶点 endl; cou

11、t 为两个点添加边,输入添加边的两个顶点: c d; InsertArc(G,c,d); cout 此时矩阵为: endl; Print(G); DeleteArc(G,c,d); cout 添加顶点V; endl; cout 此时矩阵为: endl; Print(G); c = V; InsertVex(G,c); cout 此时矩阵为: endl; Print(G); cout 删除顶点B; endl; d = B; DeleteVex(G,d); cout 此时矩阵为: endl; Print(G); DestroyGraph(G); return 0;运行结果:2、题目:2. 哈夫曼树

12、的建立。算法思想:(1) 将w1、w2、,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;(3)从森林中删除选取的两棵树,并将新树加入森林;(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。源程序:#include #define MAXVALUE 100000using namespace std;const int n=4;/叶子节点个数 /构造哈夫曼树结点 typedef structint weight;/权值 int parent

13、;/父节点 int lchild;/左子树 int rchild;/右子树 HNodeType;HNodeType HFMTree2*n-1;/结点数 /构造哈夫曼编码数组typedef structint bitn;int start;HCodeType;HCodeType HFMCoden;/创建哈夫曼树 void createHFMTree(HNodeType HFMTree,int n)int m1,x1,m2,x2;int i,j;/初始化for(i=0;i2*n-1;i+) HFMTreei.weight=0; HFMTreei.parent=-1; HFMTreei.lchild

14、=-1; HFMTreei.rchild=-1;cout请输入结点权值:endl; for(i=0;iHFMTreei.weight;for(i=0;in-1;i+) x1=x2=MAXVALUE; m1=m2=0; for(j=0;jn+i;j+) if(HFMTreej.parent=-1&HFMTreej.weightx1) x2=x1; m2=m1; x1=HFMTreej.weight; m1=j; else if(HFMTreej.parent=-1&HFMTreej.weightx2) x2=HFMTreej.weight; m2=j; HFMTreem1.parent=n+i;

15、HFMTreem2.parent=n+i; HFMTreen+i.weight=HFMTreem1.weight+HFMTreem2.weight; HFMTreen+i.lchild=m1; HFMTreen+i.rchild=m2;/转化编码 void createHFMCode(HNodeType HFMTree,HCodeType HFMCode)HCodeType cd;int i,j,c,p;for(i=0;in;i+) cd.start=n-1; c=i; p=HFMTreec.parent; while(p!=-1) if(HFMTreep.lchild=c)cd.bitcd.

16、start=0; else cd.bitcd.start=1; cd.start-; c=p; p=HFMTreec.parent; for(j=cd.start+1;jn;j+) HFMCodei.bitj=cd.bitj; HFMCodei.start=cd.start+1;/主函数 int main()int i,j;/创建树 createHFMTree(HFMTree,n);/转码 createHFMCode(HFMTree,HFMCode);coutendl;for(i=0;in;i+) for(j=HFMCodei.start;j=n-1;j+) coutHFMCodei.bitj; coutendl;return 0;运行结果:

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

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