数据结构矩阵实验报告.docx

上传人:b****6 文档编号:8820809 上传时间:2023-02-01 格式:DOCX 页数:15 大小:56.07KB
下载 相关 举报
数据结构矩阵实验报告.docx_第1页
第1页 / 共15页
数据结构矩阵实验报告.docx_第2页
第2页 / 共15页
数据结构矩阵实验报告.docx_第3页
第3页 / 共15页
数据结构矩阵实验报告.docx_第4页
第4页 / 共15页
数据结构矩阵实验报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构矩阵实验报告.docx

《数据结构矩阵实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构矩阵实验报告.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构矩阵实验报告.docx

数据结构矩阵实验报告

一、实验目的和要求

(1)掌握各种特殊矩阵如对称矩阵、上下三角矩阵和对角矩阵的压缩存储方法。

(2)掌握稀疏矩阵的各种存储结构以及基本运算实现算法。

(3)掌握广义表的递归特性、存储结构以及基本运算实现算法。

二、实验环境、内容和方法

实验内容:

①打开VisualC++6.0并输入实验指导书上的程序,并进行调试和运行。

②自行尝试编写第六个实验。

实验方法:

(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。

(二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。

(三)根据实验内容,编译程序。

实验环境:

WindowsxpVisualC++6.0

三、实验过程描述

实验①以下是一个5*5阶的螺旋方阵。

设计一个程序输出该形式的n*n阶方阵。

12345

161718196

152425207

142322218

131211109

一、打开VisualC++6.0并输入如下程序

#include

#defineMaxLen10

voidfun(inta[MaxLen][MaxLen],intn)

{

inti,j,k=0,m;

if(n%2==0)

m=n/2;

else

m=n/2+1;

for(i=0;i

{

for(j=i;j

{

k++;

a[i][j]=k;

}

for(j=i+1;j

{

k++;

a[j][n-i-1]=k;

}

for(j=n-i-2;j>=i;j--)

{

k++;

a[n-i-1][j]=k;

}

for(j=n-i-2;j>=i+1;j--)

{

k++;

a[j][i]=k;

}

}

}

voidmain()

{

intn,i,j;

inta[MaxLen][MaxLen];

printf("\n");

printf("输入n(n<10):

");

scanf("%d",&n);

fun(a,n);

printf("%d阶数字方阵如下:

\n",n);

for(i=0;i

{

for(j=0;j

printf("%4d",a[i][j]);

printf("\n");

}

printf("\n");

}

二、,编译并连接此程序,如图

三、运行此程序,如图

实验②假设n*n的稀疏矩阵A采用三元组表示,设计一个程序实现如下功能:

(1)生成如下两个稀疏矩阵的三元组a和b:

a:

1030b:

3000

01000400

00100010

00110002

(2)输出a转置矩阵的三元组

(3)输出a+b的三元组

(4)输出a*b的三元组

一、输入如图所示程序

#include

#defineN4

typedefintElemType;

#defineMaxSize100

typedefstruct

{intr;

intc;

ElemTyped;

}TupNode;

typedefstruct

{introws;

intcols;

intnums;

TupNodedata[MaxSize];

}TSMatrix;

voidCreatMat(TSMatrix&t,ElemTypeA[N][N])

{

inti,j;

t.rows=N;t.cols=N;t.nums=0;

for(i=0;i

{

for(j=0;j

if(A[i][j]!

=0)

{

t.data[t.nums].r=i;t.data[t.nums].c=j;

t.data[t.nums].d=A[i][j];t.nums++;

}

}

}

voidDispMat(TSMatrixt)

{

inti;

if(t.nums<=0)

return;

printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums);

printf("\t------------------\n");

for(i=0;i

printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d);

}

voidTranMat(TSMatrixt,TSMatrix&tb)

{

intp,q=0,v;

tb.rows=t.cols;tb.cols=t.rows;tb.nums=t.nums;

if(t.nums!

=0)

{

for(v=0;v

for(p=0;p

if(t.data[p].c==v)

{

tb.data[q].r=t.data[p].c;

tb.data[q].c=t.data[p].r;

tb.data[q].d=t.data[p].d;

q++;

}

}

}

intMatAdd(TSMatrixa,TSMatrixb,TSMatrix&c)

{

inti=0,j=0,k=0;

ElemTypev;

if(a.rows!

=b.rows||a.cols!

=b.cols)

return0;

c.rows=a.rows;c.cols=a.cols;

while(i

{

if(a.data[i].r==b.data[j].r)

{

if(a.data[i].c

{

c.data[k].r=a.data[i].r;

c.data[k].c=a.data[i].c;

c.data[k].d=a.data[i].d;

k++;i++;

}

elseif(a.data[i].c>b.data[j].c)

{

c.data[k].r=b.data[j].r;

c.data[k].c=b.data[j].c;

c.data[k].d=b.data[j].d;

k++;j++;

}

else

{

v=a.data[i].d+b.data[j].d;

if(v!

=0)

{

c.data[k].r=a.data[i].r;

c.data[k].c=a.data[i].c;

c.data[k].d=v;

k++;

}

i++;j++;

}

}

elseif(a.data[i].r

{

c.data[k].r=a.data[i].r;

c.data[k].c=a.data[i].c;

c.data[k].d=a.data[i].d;

k++;i++;

}

else

{

c.data[k].r=b.data[j].r;

c.data[k].c=b.data[j].c;

c.data[k].d=b.data[j].d;

k++;j++;

}

c.nums=k;

}

return1;

}

intvalue(TSMatrixc,inti,intj)

{

intk=0;

while(k

=i||c.data[k].c!

=j))

k++;

if(k

return(c.data[k].d);

else

return(0);

}

intMatMul(TSMatrixa,TSMatrixb,TSMatrix&c)

{

inti,j,k,p=0;

ElemTypes;

if(a.cols!

=b.rows)

return0;

for(i=0;i

for(j=0;j

{

s=0;

for(k=0;k

s=s+value(a,i,k)*value(b,k,j);

if(s!

=0)

{

c.data[p].r=i;

c.data[p].c=j;

c.data[p].d=s;

p++;

}

}

c.rows=a.rows;

c.cols=b.cols;

c.nums=p;

return1;

}

voidmain()

{

ElemTypea1[N][N]={{1,0,3,0},{0,1,0,0},{0,0,1,0},{0,0,1,1}};

ElemTypeb1[N][N]={{3,0,0,0},{0,4,0,0},{0,0,1,0},{0,0,0,2}};

TSMatrixa,b,c;

CreatMat(a,a1);

CreatMat(b,b1);

printf("a的三元组:

\n");DispMat(a);

printf("b的三元组:

\n");DispMat(b);

printf("a转置为c\n");

TranMat(a,c);

printf("c的三元组:

\n");DispMat(c);

printf("c=a+b\n");

MatAdd(a,b,c);

printf("c的三元组:

\n");DispMat(c);

printf("c=a*b\n");

MatMul(a,b,c);

printf("c的三元组:

\n");DispMat(c);

}

二、程序运行结果如图

实验③编写一个程序实现广义表的各种运算,并在此基本上设计一个程序完成如下功能:

(1)建立广义表g=“(b,(b,a,(#),d),((a,b),c,((#))))”的链式存储结构;

(2)输出广义表g的长度;

(3)输出广义表g的深度;

(4)输出广义表g的最大原子;

一、输入如图所示程序

#include

#include

typedefcharElemType;

typedefstructlnode

{inttag;

union

{

ElemTypedata;

structlnode*sublist;

}val;

structlnode*link;

}GLNode;

GLNode*CreatGL(char*&s)

{

GLNode*h;

charch;

ch=*s++;

if(ch!

='\0')

{

h=(GLNode*)malloc(sizeof(GLNode));

if(ch=='(')

{

h->tag=1;

h->val.sublist=CreatGL(s);

}

elseif(ch==')')

h=NULL;

else

{

h->tag=0;

h->val.data=ch;

}

}

elseh=NULL;

ch=*s++;

if(h!

=NULL)

if(ch==',')

h->link=CreatGL(s);

else

h->link=NULL;

returnh;

}

intGLLength(GLNode*g)

{

intn=0;

g=g->val.sublist;

while(g!

=NULL)

{

n++;

g=g->link;

}

returnn;

}

intGLDepth(GLNode*g)

{

intmax=0,dep;

if(g->tag==0)

return0;

g=g->val.sublist;

if(g==NULL)

return1;

while(g!

=NULL)

{

if(g->tag==1)

{

dep=GLDepth(g);

if(dep>max)max=dep;

}

g=g->link;

}

return(max+1);

}

voidDispGL(GLNode*g)

{

if(g!

=NULL)

{

if(g->tag==1)

{

printf("(");

if(g->val.sublist==NULL)printf("");

elseDispGL(g->val.sublist);

}

elseprintf("%c",g->val.data);

if(g->tag==1)printf(")");

if(g->link!

=NULL)

{

printf(",");

DispGL(g->link);

}

}

}

voidmain()

{

GLNode*g;

char*str="(b,(b,a,a),((a,b),c))";

g=CreatGL(str);

printf("广义表g:

");DispGL(g);printf("\n");

printf("广义表g的长度:

%d\n",GLLength(g));

printf("广义表g的深度:

%d\n",GLDepth(g));

printf("\n");

}

二、程序运行结果如图

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 农学

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

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