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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

大数据结构实验报告材料.docx

1、大数据结构实验报告材料本科生实验报告(二)姓名: 学院: 专业: 班级: 实验课程名称: 数据结构实验日期: 2013年 5月 25 日指导教师及职称: 实验成绩:开课时间:20122013 学年 第二 学期实验题目数据结构实验小组合作姓名班级学 号3一、实验目的 数组和广义表:实验6.1: 求5*5阶螺旋方阵;实验6.2: 求一个矩阵的马鞍点;实验6.3: 求两个对称矩阵之和与乘积;实验6.4: 实现稀疏矩阵(采用三元组表示)的基本运算;实验6.5: 实现广义表的基本运算。二实验环境计算机 Visual c+ 6.0三、实验内容与步骤6.1 以下是一个5*5的螺旋矩阵。设计一个程序exp6-

2、1.cpp输出该形式的n*n(n10)阶方阵(顺时针方向旋进)。1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9主程序如下: #include stdafx.h#include #define MaxLen 10void fun(int aMaxLenMaxLen,int n)int i,j,k=0,m;if (n%2=0) /m=n/2m=n/2;elsem=n/2+1;for (i=0;im;i+)for (j=i;jn-i;j+)k+;aij=k;for (j=i+1;j=i;j-)k+;an-i-1j=k;for

3、 (j=n-i-2;j=i+1;j-)k+;ji=k;void main()int n,i,j;int aMaxLenMaxLen;printf(输入n(n10):);scanf(%d,&n);fun(a,n);printf(%d阶数字方阵如下:n,n);for (i=0;in;i+)for (j=0;jn;j+)printf(%4d,aij);printf(n);运行结果:6.2:如果矩阵A中存在这样的一个元素Aij满足条件:Aij是第i行中值最小的元素,且又是第j列中值最大的元素,则称为该矩阵的一个马鞍点。设计一个程序exp6-2.cpp计算出m*n的矩阵A的所有马鞍点。主程序如下:#in

4、clude #define M 4#define N 4void MinMax(int AMN) int i,j; bool have=false; int minM,maxN; for (i=0;iM;i+) /计算出每行的最小值元素,放入min0.M-1之中 mini=Ai0; for (j=1;jN;j+) if (Aijmini) mini=Aij; for (j=0;jN;j+) /计算出每列的最大值元素,放入max0.N-1之中 maxj=A0j; for (i=1;imaxj) maxj=Aij; for (i=0;iM;i+) /判定是否为马鞍点 for (j=0;jN;j+)

5、 if (mini=maxj) printf( A%d%d=%dn,i,j,Aij); /显示马鞍点 have=true; if (!have) printf(没有鞍点n);void main() int i,j; int AMN=9, 7, 6, 8,20,26,22,25,28,36,25,30,12,4, 2, 6; printf(A矩阵:n); for (i=0;iM;i+) for (j=0;jN;j+) printf(%4d,Aij); printf(n); printf(A矩阵中的马鞍点:n); MinMax(A); /调用MinMax()找马鞍点运行结果:6.3:已知A和B为两

6、个n*n阶的对称矩阵,输入时,对称矩阵只输入下三角形元素,存入一维数组,如图6.5所示(对称矩阵M存储在一维数组A中),设计一个程序exp6-3.cpp实习如下功能:(1) 求对称矩阵A和B的和。(2) 求对称矩阵A和B的乘积。A:图6.5 对称矩阵的存储转换形式主程序如下:#include #define N 4#define M 10int value(int a,int i,int j) if (i=j) return a(i*(i-1)/2+j; else return a(j*(j-1)/2+i;void madd(int a,int b,int cN) int i,j; for (

7、i=0;iN;i+) for (j=0;jN;j+) cij=value(a,i,j)+value(b,i,j);void mult(int a,int b,int cN) int i,j,k,s; for (i=0;iN;i+) for (j=0;jN;j+) s=0; for (k=0;kN;k+) s=s+value(a,i,k)*value(b,k,j); cij=s; void disp1(int a) int i,j; for (i=0;iN;i+) for (j=0;jN;j+) printf(%4d,value(a,i,j); printf(n); void disp2(int

8、 cN) int i,j; for (i=0;iN;i+) for (j=0;jN;j+) printf(%4d,cij); printf(n); void main() int aM=1,2,3,4,5,6,7,8,9,10; int bM=1,1,1,1,1,1,1,1,1,1; int c1NN,c2NN; madd(a,b,c1); mult(a,b,c2); printf(a矩阵:n);disp1(a); printf(b矩阵:n);disp1(b); printf(a+b:n);disp2(c1); printf(ab:n);disp2(c2); printf(n);运行结果:6.

9、4:假设n*n的稀疏矩阵A采用三元组表示,设计一个程序exp6-4.cpp实现如下功能:(1) 生成如下两个稀疏矩阵矩阵的三元组a和b: (2) 输出a转置矩阵的三元组;(3) 输出a+b的三元组;(4) 输出a*b的三元组。主程序如下:#include #define N 4typedef int ElemType;#define MaxSize 100 /矩阵中非零元素最多个数typedef struct int r; /行号 int c; /列号 ElemType d; /元素值 TupNode; /三元组定义typedef struct int rows; /行数值 int cols;

10、 /列数值 int nums; /非零元素个数 TupNode dataMaxSize; TSMatrix; /三元组顺序表定义void CreatMat(TSMatrix &t,ElemType ANN) int i,j; t.rows=N;t.cols=N;t.nums=0; for (i=0;iN;i+) for (j=0;jN;j+) if (Aij!=0) t.datat.nums.r=i;t.datat.nums.c=j; t.datat.nums.d=Aij;t.nums+; void DispMat(TSMatrix t) int i; if (t.nums=0) return

11、; printf(t%dt%dt%dn,t.rows,t.cols,t.nums); printf(t-n); for (i=0;it.nums;i+) printf(t%dt%dt%dn,t.datai.r,t.datai.c,t.datai.d);void TranMat(TSMatrix t,TSMatrix &tb) int p,q=0,v; /q为tb.data的下标 tb.rows=t.cols;tb.cols=t.rows;tb.nums=t.nums; if (t.nums!=0) for (v=0;vt.cols;v+) /tb.dataq中的记录以c域的次序排列 for (

12、p=0;pt.nums;p+) /p为t.data的下标 if (t.datap.c=v) tb.dataq.r=t.datap.c; tb.dataq.c=t.datap.r; tb.dataq.d=t.datap.d; q+; bool MatAdd(TSMatrix a,TSMatrix b,TSMatrix &c) int i=0,j=0,k=0; ElemType v; if (a.rows!=b.rows | a.cols!=b.cols) return false; /行数或列数不等时不能进行相加运算 c.rows=a.rows;c.cols=a.cols; /c的行列数与a的相

13、同 while (ia.nums & jb.nums) /处理a和b中的每个元素 if (a.datai.r=b.dataj.r) /行号相等时 if(a.datai.cb.dataj.c)/a元素的列号大于b元素的列号 c.datak.r=b.dataj.r; /将b元素添加到c中 c.datak.c=b.dataj.c; c.datak.d=b.dataj.d; k+;j+; else /a元素的列号等于b元素的列号 v=a.datai.d+b.dataj.d; if (v!=0) /只将不为0的结果添加到c中 c.datak.r=a.datai.r; c.datak.c=a.datai.

14、c; c.datak.d=v; k+; i+;j+; else if (a.datai.rb.dataj.r) /a元素的行号小于b元素的行号 c.datak.r=a.datai.r; /将a元素添加到c中 c.datak.c=a.datai.c; c.datak.d=a.datai.d; k+;i+; else /a元素的行号大于b元素的行号 c.datak.r=b.dataj.r; /将b元素添加到c中 c.datak.c=b.dataj.c; c.datak.d=b.dataj.d; k+;j+; c.nums=k; return true;int getvalue(TSMatrix c

15、,int i,int j) int k=0; while (kc.nums & (c.datak.r!=i | c.datak.c!=j) k+; if (kc.nums) return(c.datak.d); else return(0);bool MatMul(TSMatrix a,TSMatrix b,TSMatrix &c) int i,j,k,p=0; ElemType s; if (a.cols!=b.rows) /a的列数不等于b的行数时不能进行相乘运算 return false; for (i=0;ia.rows;i+) for (j=0;jb.cols;j+) s=0; fo

16、r (k=0;ka.cols;k+) s=s+getvalue(a,i,k)*getvalue(b,k,j); if (s!=0) /产生一个三元组元素 c.datap.r=i; c.datap.c=j; c.datap.d=s; p+; c.rows=a.rows; c.cols=b.cols; c.nums=p; return true;void main() ElemType a1NN=1,0,3,0,0,1,0,0,0,0,1,0,0,0,1,1; ElemType b1NN=3,0,0,0,0,4,0,0,0,0,1,0,0,0,0,2; TSMatrix a,b,c; CreatM

17、at(a,a1); CreatMat(b,b1); printf(a的三元组:n);DispMat(a); printf(b的三元组:n);DispMat(b); printf(a转置为cn); TranMat(a,c); printf(c的三元组:n);DispMat(c); printf(c=a+bn); MatAdd(a,b,c); printf(c的三元组:n);DispMat(c); printf(c=abn); MatMul(a,b,c); printf(c的三元组:n);DispMat(c);运行结果:6.5:编写一个程序exp6-5.cpp,实现广义表的各种运算,并在此基础上设

18、计一个主程序完成如下功能:(1) 建立广义表g=“(b,(b,a,(#),d),(a,b),c,(#))”的链式存储结构;(2) 输出广义表g的长度;(3) 输出广义表g的深度;(4) 输出广义表g的最大原子。主程序如下:#include #include typedef char ElemType;typedef struct lnode int tag; /节点类型标识 union ElemType data; struct lnode *sublist; val; struct lnode *link; /指向下一个元素 GLNode;GLNode *CreateGL(char *&s)

19、 /返回由括号表示法表示s的广义表链式存储结构 GLNode *g; char ch=*s+; /取一个字符 if (ch!=0) /串未结束判断 g=(GLNode *)malloc(sizeof(GLNode);/创建一个新节点 if (ch=() /当前字符为左括号时 g-tag=1; /新节点作为表头节点 g-val.sublist=CreateGL(s); /递归构造子表并链到表头节点 else if (ch=) g=NULL; /遇到)字符,g置为空 else if (ch=#) /遇到#字符,表示空表 g-val.sublist=NULL; else /为原子字符 g-tag=0

20、; /新节点作为原子节点 g-val.data=ch; else /串结束,g置为空 g=NULL; ch=*s+; /取下一个字符 if (g!=NULL) /串未结束,继续构造兄递节点 if (ch=,) /当前字符为, g-link=CreateGL(s); /递归构造兄递节点 else /没有兄弟了,将兄弟指针置为NULL g-link=NULL; return g; /返回广义表gint GLLength(GLNode *g) /求广义表g的长度 int n=0; g=g-val.sublist; /g指向广义表的第一个元素 while (g!=NULL) n+; g=g-link;

21、 return n;int GLDepth(GLNode *g) /求广义表g的深度 int max=0,dep; if (g-tag=0) return 0; g=g-val.sublist; /g指向第一个元素 if (g=NULL) /为空表时返回1 return 1; while (g!=NULL) /遍历表中的每一个元素 if (g-tag=1) /元素为子表的情况 dep=GLDepth(g); /递归调用求出子表的深度 if (depmax) max=dep; /max为同一层所求过的子表中深度的最大值 g=g-link; /使g指向下一个元素 return(max+1); /返

22、回表的深度void DispGL(GLNode *g) /输出广义表g if (g!=NULL) /表不为空判断 /先输出g的元素 if (g-tag=0) /g的元素为原子时 printf(%c, g-val.data); /输出原子值 else /g的元素为子表时 printf(); /输出( if (g-val.sublist=NULL) /为空表时 printf(#); else /为非空子表时 DispGL(g-val.sublist); /递归输出子表 printf(); /输出) if (g-link!=NULL) printf(,); DispGL(g-link); /递归输出

23、g的兄弟 ElemType maxatom(GLNode *g) /求广义表g中最大原子 ElemType max1,max2; if (g!=NULL) if (g-tag=0) max1=maxatom(g-link); return(g-val.datamax1?g-val.data:max1); else max1=maxatom(g-val.sublist); max2=maxatom(g-link); return(max1max2?max1:max2); else return 0;void main() GLNode *g; char *str=(b,(b,a,(#),d),(

24、a,b),c,(#); g=CreateGL(str); printf(广义表g:);DispGL(g);printf(n); printf(广义表g的长度:%dn,GLLength(g); printf(广义表g的深度:%dn,GLDepth(g); printf(最大原子:%cn,maxatom(g);运行结果:四、实验过程与分析1.通过实验6.1的学习,了解了如何求5*5阶螺旋方阵,并且方阵是建立在数组的基础上,且从中掌握了数组的基本运算如Value(A,index1,index2,indexd):A是已存在的d维数组,index1,index2,indexd是指定的d个下标值,且这些下标均未越界。其运算结果是返回由上述下标指定的A中的对应;Assign(A,e,index1,index2,indexd):A是已存在的d维数组,e为元素变量,index1,index2,

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

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