数据结构程序设计-矩阵的运算

合集下载

数据结构实验五矩阵的压缩存储与运算学习资料

数据结构实验五矩阵的压缩存储与运算学习资料

数据结构实验五矩阵的压缩存储与运算第五章矩阵的压缩存储与运算【实验目的】1. 熟练掌握稀疏矩阵的两种存储结构(三元组表和十字链表)的实现;2. 掌握稀疏矩阵的加法、转置、乘法等基本运算;3. 加深对线性表的顺序存储和链式结构的理解。

第一节知识准备矩阵是由两个关系(行关系和列关系)组成的二维数组,因此对每一个关系上都可以用线性表进行处理;考虑到两个关系的先后,在存储上就有按行优先和按列优先两种存储方式,所谓按行优先,是指将矩阵的每一行看成一个元素进行存储;所谓按列优先,是指将矩阵的每一列看成一个元素进行存储;这是矩阵在计算机中用一个连续存储区域存放的一般情形,对特殊矩阵还有特殊的存储方式。

一、特殊矩阵的压缩存储1. 对称矩阵和上、下三角阵若n阶矩阵A中的元素满足= (0≤i,j≤n-1 )则称为n阶对称矩阵。

对n阶对称矩阵,我们只需要存储下三角元素就可以了。

事实上对上三角矩阵(下三角部分为零)和下三角矩阵(上三角部分为零),都可以用一维数组ma[0.. ]来存储A的下三角元素(对上三角矩阵做转置存储),称ma为矩阵A的压缩存储结构,现在我们来分析以下,A和ma之间的元素对应放置关系。

问题已经转化为:已知二维矩阵A[i,j],如图5-1,我们将A用一个一维数组ma[k]来存储,它们之间存在着如图5-2所示的一一对应关系。

任意一组下标(i,j)都可在ma中的位置k中找到元素m[k]= ;这里:k=i(i+1)/2+j (i≥j)图5-1 下三角矩阵a00 a10 a11 a20 … an-1,0 … an-1,n-1k= 0 1 2 3 …n(n-1)/2 …n(n+1)/2-1图5-2下三角矩阵的压缩存储反之,对所有的k=0,1,2,…,n(n+1)/2-1,都能确定ma[k]中的元素在矩阵A中的位置(i,j)。

这里,i=d-1,(d是使sum= > k的最小整数),j= 。

2. 三对角矩阵在三对角矩阵中,所有的非零元素集中在以主对角线为中心的带内状区域中,除了主对角线上和直接在对角线上、下方对角线上的元素之外,所有其它的元素皆为零,见图5-3。

matlab程序设计矩阵及其运算

matlab程序设计矩阵及其运算

matlab程序设计矩阵及其运算1. 矩阵的定义和表示在matlab中,矩阵是一种常用的数据结构,用于存储和处理多维数据。

矩阵由行和列组成,每个元素都有一个唯一的位置。

在matlab中,可以通过方括号[ ]来定义和表示矩阵。

以下是一些常见的矩阵定义:一维行向量:matlabA = [1 2 3 4 5];一维列向量:matlabB = [1; 2; 3; 4; 5];二维矩阵:matlabC = [1 2 3; 4 5 6; 7 8 9];可以使用size()函数获取矩阵的维度信息,例如:matlab[m, n] = size(C); % m为行数,n为列数2. 矩阵的运算matlab中的矩阵可以进行各种运算,包括基本的加减乘除运算、转置运算、矩阵乘法运算等。

2.1 加法和减法矩阵的加法和减法可以使用+和-运算符进行,例如:matlabA = [1 2 3; 4 5 6; 7 8 9];B = [9 8 7; 6 5 4; 3 2 1];C = A + B; % 矩阵的加法D = A B; % 矩阵的减法2.2 矩阵乘法矩阵乘法在matlab中使用运算符进行,例如:matlabA = [1 2 3; 4 5 6; 7 8 9];B = [9 8 7; 6 5 4; 3 2 1];C = A B; % 矩阵的乘法2.3 转置运算矩阵的转置表示将矩阵的行和列互换,使用'运算符进行,例如:matlabA = [1 2 3; 4 5 6; 7 8 9];B = A'; % A的转置矩阵2.4 矩阵的逆运算矩阵的逆运算是指对于一个可逆矩阵A,存在一个矩阵B,使得A B = B A = I,其中I为单位矩阵。

在matlab中,可以使用inv()函数来求一个矩阵的逆矩阵,例如:matlabA = [1 2; 3 4];B = inv(A); % A的逆矩阵需要注意的是,不是所有的矩阵都有逆矩阵,对于不可逆的矩阵,inv()函数会报错。

数据结构课程设计报告---矩阵的运算

数据结构课程设计报告---矩阵的运算

- - 数据结构课程设计报告题目:专业:班级:学号:姓名:指导教师:时间:一、课程设计题目及所涉及知识点设计题目是“矩阵的运算〞;所涉及的知识点主要是:1、利用数组的形式来储存数据,在main函数里面,实现对于数据的输入操作,利用switch 语句进展选择来执行操作,利用for语句与do……while语句来实现功能的循环操作。

2、矩阵的加法、减法、乘法、数乘、转置的根本算法方式。

3、通过switch语句进展选择来执行操作,来实现每个算法的功能。

二、课程设计思路及算法描述设计思路:用程序实现矩阵能够完成矩阵的转置运算;矩阵的数乘运算;矩阵的加法运算;矩阵的减法运算;矩阵的乘法运算;这几种矩阵的简单的运算。

用数组把将要运算的矩阵储存起来,然后实现矩阵的这几种运算。

在main函数里面,来实现对于数据的输入操作,利用switch语句进展选择来执行操作,利用for语句来实现功能的循环操作。

算法:算法1:矩阵的转置运算;首先是把将要运算的矩阵存放在数组中,矩阵的转置运算,就是把你将要进展运算的A 矩阵的行ar和列ac,把A矩阵的行ar作为B矩阵的bc,A矩阵的列ac作为B矩阵的br,这样得到的新矩阵B的行br和列bc就是矩阵A的转置。

算法如下:for(i=0;i<ar;i++)for(j=0;j<ac;j++)B[j][i]=A[i][j];算法2:矩阵的数乘运算;首先是把将要运算的矩阵存放在数组中,矩阵的数乘运算,就是实现用一个实数k去A矩阵。

实数k去乘矩阵的每一行和每一列,得到的一个新的矩阵B,这样就解决了矩阵的数乘运算。

算法如下:for(i=0;i<ar;i++)for(j=0;j<ac;j++)B[i][j]=k*A[i][j];算法3:矩阵的加法运算;首先是把将要运算的矩阵存放在数组中,矩阵的加法运算,就是要实现A矩阵与B 矩阵进展加法运算。

事实上就是A矩阵的每一行ar与B矩阵的每一行br进展加法运算,而得到的一个新的矩阵C的每一行cr就是A矩阵的ar行与B矩阵的br行的和;A矩阵的每一列ac与B矩阵的每一列bc进展加法运算,而得到的一个新的矩阵C的每一列cc 就是A矩阵的ac列与B矩阵的bc列的和。

数据结构稀疏矩阵运算器

数据结构稀疏矩阵运算器

数据结构稀疏矩阵运算器引言:稀疏矩阵是指在一个二维矩阵中,绝大多数元素为0或者没有意义的元素。

与之相对,稠密矩阵则是指大部分元素都有意义且不为0的矩阵。

稀疏矩阵在很多实际问题中经常出现,例如图论、网络分析、自然语言处理等领域。

为了高效地处理稀疏矩阵的运算,我们可以使用稀疏矩阵运算器。

一、稀疏矩阵的表示方法对于一个m×n的稀疏矩阵,我们可以使用三元组(Triplet)的方式进行表示。

三元组表示法包括三个数组:行数组row、列数组col 和值数组value。

其中,row[i]和col[i]分别表示第i个非零元素的行和列,value[i]表示第i个非零元素的值。

通过这种方式,我们可以用较少的空间来表示一个稀疏矩阵,从而提高运算效率。

二、稀疏矩阵的加法运算稀疏矩阵的加法运算可以通过遍历两个稀疏矩阵的非零元素,并将相同位置的元素相加得到结果。

具体步骤如下:1. 初始化一个新的稀疏矩阵result,其行数和列数与原始稀疏矩阵相同。

2. 遍历两个稀疏矩阵的非零元素,将相同位置的元素相加,并将结果存储在result中。

3. 返回result作为加法运算的结果。

三、稀疏矩阵的乘法运算稀疏矩阵的乘法运算可以通过矩阵的数学定义来实现。

具体步骤如下:1. 初始化一个新的稀疏矩阵result,其行数等于第一个稀疏矩阵的行数,列数等于第二个稀疏矩阵的列数。

2. 遍历第一个稀疏矩阵的每个非零元素,将其与第二个稀疏矩阵相应位置的元素相乘,并将结果累加到result中。

3. 返回result作为乘法运算的结果。

四、稀疏矩阵的转置运算稀疏矩阵的转置运算可以通过交换行数组row和列数组col来实现。

具体步骤如下:1. 初始化一个新的稀疏矩阵result,其行数等于原始稀疏矩阵的列数,列数等于原始稀疏矩阵的行数。

2. 将原始稀疏矩阵的行数组row赋值给result的列数组col,将原始稀疏矩阵的列数组col赋值给result的行数组row。

c程序设计教程与实训-数组-矩阵和 pta

c程序设计教程与实训-数组-矩阵和 pta

c程序设计教程与实训-数组-矩阵和ptaC程序设计教程与实训是一门涉及C语言编程的课程,主要是为了教授学生如何使用C语言进行程序设计。

通过该课程的学习和实践,学生可以掌握C语言的基本语法、程序结构、函数、指针、数组、矩阵等知识,从而能够独立编写较为复杂的C程序。

在该课程中,数组和矩阵是非常重要的一部分。

数组是C语言中一种最基本的数据结构,它可以存储一系列相同类型的数据,并通过数组下标来访问各个元素。

学习数组的概念和使用方法,对于理解和解决很多实际问题非常有帮助。

矩阵可以看作是二维数组,它在科学计算和数据处理中有着广泛的应用。

学习矩阵的相关知识,可以让学生掌握矩阵的表示方法、运算规则以及一些基本的矩阵操作。

在教学过程中,一般会通过一些实例来演示如何声明和初始化数组、如何通过循环来遍历数组元素、如何进行数组的一些基本操作等。

在实际的编程实践过程中,学生可以通过编写小型的程序来加深对数组和矩阵的理解。

例如,可以编写一个程序,实现矩阵的相乘运算;或者编写程序,实现对数组进行排序等。

通过这些实际的例子,学生可以更好地掌握数组和矩阵的使用方法,提高自己的编程能力。

除了课堂教学之外,还可以利用在线教育平台pta来进行练习和实训。

pta提供了大量的C语言编程题目,并且能够自动评测学生的代码,给予相应的反馈。

学生可以通过pta进行刷题,从而加深对C语言的理解和掌握。

通过解决各种编程问题,学生能够锻炼自己的编程思维和动手能力,提高自己解决实际问题的能力。

总之,C程序设计教程与实训以数组和矩阵为重点,通过讲解和实践,帮助学生掌握C语言的基础知识和编程技巧。

通过学习数组和矩阵的使用方法,学生能够更好地理解C语言的运行原理,提高编程能力,并能够应用所学知识解决实际问题。

同时,pta作为一个编程练习平台,能够提供大量的编程题目和自动评测功能,帮助学生进一步提升自己的编程能力。

通过这门课程的学习和实践,学生将能够具备独立进行C语言编程的能力,并为以后的学习和工作打下坚实的基础。

matlab程序设计矩阵及其运算

matlab程序设计矩阵及其运算

矩阵及其运算
1、特征值分解 由以前学过的知识,我们已经了解到在MATLAB是 应用函数eig来解决的。但是应用到特征值分解的部分, 需要在形式上作一定的变化,其使用的格式如下: [V,D]=eig(X)命令生成两个矩阵V和D,其中V是以 矩阵X的特征向量作为列向量组成的矩阵,D是由矩阵X 的特征值作为主对角线元素构成的对角矩阵,使得满足 关系式X*V=V*D。
矩阵及其运算
randn(M,N):表示生成M×N阶随机矩阵,生成 的矩阵的元素值在服从正态分布N(0,1)。 例十五 随机矩阵的生成

矩阵及其运算
4 魔术矩阵的生成 魔术矩阵是一个经常遇到的矩阵,它是一个方阵,特 点是每一行、每一列以及每一主对角线元素之和都同。 在MATLAB中,用函数magic来生成。其格式如下: magic(N):表示生成N×N阶的魔术矩阵,使矩 阵的每一行、每一列以及每一主对角线元素之和都同。 其中N>0,N=2除外。 例十五 魔术矩阵的生成。
矩阵及其运算
四 矩阵的分解运算 MATLAB的数学处理能力之所以强大,很大一部分 的原因就是它的矩阵函数功能的扩展。矩阵分解在数值 分析和科学研究中有着重要的地位。常用的分解方法有 以下几种:三角分解(lu)、正交分解(qr)、特征值 分解(eig)和奇异值分解(svd)。我们这里主要介绍特 征值分解。
矩阵及其运算
reshape(X,[M,N,p,…]):该命令与上个 reshape(X,M,N,p,…)命令的效果一致。 例十一:

矩阵及其运算
2 矩阵的变向 矩阵的变向包括对矩阵进行旋转、上下翻转、左右翻 转以及对指定的维进行翻转。分别由函数rot90、 flipud、fliplr和flipdim来实现。具体用法如下: rot90(A):命令返回矩阵A按逆时钟方向旋转90度 所得的矩阵。 rot90(A,K):命令返回矩阵A按逆时针方向旋转 90×K度所得的矩阵。(K=±1, ±2,…)。 flipud(X):命令将矩阵X上下翻转。

数据结构课程设计稀疏矩阵

数据结构课程设计稀疏矩阵

稀疏矩阵应用摘要本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘操作,最后输出运算后的结果。

在程序设计中,考虑到方法的难易程度,采用了先用三元组实现稀疏矩阵的输入,输出,及其转置,相加,相乘操作的方法,再在十字链表下实现。

程序通过调试运行,结果与预期一样,初步实现了设计目标。

关键词程序设计;稀疏矩阵;三元组;十字链表1 引言1.1课程设计任务本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘操作,最后输出运算后的结果。

稀疏矩阵采用三元组和十字链表表示,并在两种不同的存储结构下,求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C;求出A的转置矩阵D,输出D;求两个稀疏矩阵A和B的相乘矩阵E,并输出E。

1.2课程设计性质数据结构课程设计是重要地实践性教学环节。

在进行了程序设计语言课和《数据结构》课程教学的基础上,设计实现相关的数据结构经典问题,有助于加深对数据结构课程的认识。

本课程设计是数据结构中的一个关于稀疏矩阵的算法的实现,包括在三元组和十字链表下存储稀疏矩阵,并对输入的稀疏矩阵进行转置,相加,相乘等操作,最后把运算结果输出。

此课程设计要求对数组存储结构和链表存储结构非常熟悉,并能熟练使用它们。

1.3课程设计目的其目的是让我们在学习完C、数据结构等课程基础上,掌握多维数组的逻辑结构和存储结构、掌握稀疏矩阵的压缩存储及转置,相加,相乘等基本操作,并用不同的方法输出结果,进一步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。

2需求分析2.1设计函数建立稀疏矩阵及初始化值和输出稀疏矩阵的值本模块要求设计函数建立稀疏矩阵并初始化,包括在三元组结构下和十字链表结构下。

首先要定义两种不同的结构体类型,在创建稀疏矩阵时,需要设计两个不同的函数分别在三元组和十字链表下创建稀疏矩阵,在输入出现错误时,能够对错误进行判别处理,初始化稀疏矩阵都为空值,特别注意在十字链表下,对变量进行动态的地址分配。

矩阵的运算实例程序

矩阵的运算实例程序

设计一个矩阵相乘的程序假设有1 5 7 3 3 9 1 4 1 4A= 3 6 3 9 B= 5 6 7 9 0 31 2 8 7 3 2 7 2 5 60 3 1 9 9 7 4 7 8 03 2 5 4求出A*B的矩阵程序构思:我们所知的矩阵乘法运算的算式如下:C ij = A ik X B kj的k从1到n 的和,那么可以用一个3层循环来运算此算式:C(1,1)=A(1,1)*B(1,1)+A(1,2)*B(2,1)+A(1,3)*B(3,1)+A(1,4)*B(4,1) =(1*3)+(5*5)+(7*3)+(3*9)=3+25+21+27=76同理C(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2)+A(1,4)*B(2,2) =(1*9)+(5*6)+(7*2)+(3*7)=9+30+14+21=74依此类推,我们可以求得矩阵A与矩阵B的矩阵乘积。

void main(void){int matrixa[5][4]={1,5,7,3,3,6,3,9,1,2,8,7,0,3,1,9,3,2,5,4};int matrixb[4][6]={3,9,1,4,1,4,5,6,7,9,0,3,3,2,7,2,5,6,9,7,4,7,8,0};int matrixc[5][6];int i,j,k;for(i=0;i<5;i++)for(j=0;j<6;j++){matrixc[i][j]=0;for(k=0;k<4;k++)matrixc[i][j]+=matrixa[i][k]*matrixb[k][j];}printf("The matrix A:\n");for(i=0;i<5;i++){for(k=0;k<4;k++)printf("%5d",matrixa[i][k]);printf("\n");}printf("\nThe matrixb:\n");for(k=0;k<4;k++){for(j=0;j<6;j++)printf("%5d",matrixb[k][j]);printf("\n");}printf("\nMatrix C=Matrix A* Matrix B\n");for(i=0;i<5;i++){for(j=0;j<6;j++)printf("%5d",Matrixc[i][j]);printf("\n");}}运行结果:The Matrix A:1 5 7 33 6 3 91 2 8 70 3 1 93 2 5 4The Matrix B:3 9 14 1 45 6 7 9 0 33 2 7 2 5 69 7 4 7 8 0Matrix C=Matrix A*Matrix B:76 74 97 84 60 61129 132 102 135 90 48100 86 99 87 97 5899 83 64 92 77 1570 77 68 68 60 48二维数组行列互换程序实例:设计一个能将二维数组转换成以列为主的一维数组和以行为主的一维数组。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

break; } else x=0; }//for p for(q=1;q<=N->tu;q++)//求矩阵M行列中所对应的非 零元素的值 赋值给y { if((i==N->data[q].row)&&(j==N->data[q].col)) { y=N->data[q].e; break; } else y=0; }//for q if((x+y)!=0)//判断相加后的值是否为0 不为零则插 入Q中 {//用三元组来存储所得的和 Q->data[Q->tu+1].row=i; Q->data[Q->tu+1].col=j; Q->data[Q->tu+1].e=x+y; Q->tu++; }//if }//for j }//for i return OK; } //*****************矩阵的求差运算*****************// int SubMatrix(TSMatrix *M,TSMatrix *N,TSMatrix *Q)//求采 用三元组顺序表存储表示的稀疏矩阵M和N的差,结果赋给矩阵Q { int i,j,p,q,x=0,y=0; if((M->mu<=0)||(M->nu<=0)||(M->tu<=0)||(N->mu<=0)||(N>nu<=0)||(疏矩阵、三元组类型
typedef struct{ int row; //行数 int col; //列数 int e; //非零元素值 } typedef struct{ int row,col; //非零元的行标和列标 int e; //非零元素值 }Triple; typedef struct{//行逻辑连接的顺序表// Triple data[MAXSIZE+1]; //非零元三元组表,data[0] int rpos[MAXRC+1]; //各行第一个非零元的位置表
五、用户手 册……………………………………………… 12 六、测试结 果……………………………………………… 13 七、心得体 会……………………………………………… 16
◎实验题目: 矩阵运算器
一.问题描述:
1. 算; 2. 利用稀疏特点进行存储和计算可以大大节省存储空间,提高计 设计一个矩阵运算器,对矩阵进行加(+)、减(-)、相乘(*)运
for(i=1;i<=M->mu;i++)//输出矩阵 { for(j=1;j<=M->nu;j++) printf("%5d",a[i][j]); printf("\n"); } } //*************矩阵的求和运算*****************// int AddSMatrix(TSMatrix *M,TSMatrix *N,TSMatrix *Q)//求 采用三元组顺序表存储表示的稀疏矩阵M和N的和,结果赋给矩阵Q { int i,j,p,q,x=0,y=0; if((M->mu<=0)||(M->nu<=0)||(M->tu<=0)||(N->mu<=0)||(N>nu<=0)||(N->tu<=0))//判断行数列数非零元素个数是否符合匹配 return ERROR; if(M->mu!=N->mu||M->nu!=N->nu)//判断A与B的行列数 是否相等的 return ERROR; Q->mu=M->mu;//矩阵Q的初始化 Q->nu=M->nu; Q->tu=0; for(i=1;i<=Q->mu;i++) { for(j=1;j<=Q->nu;j++)//寻找矩阵M,N中非零元素相等 的行列 { for(p=1;p<=M->tu;p++)//求矩阵M行列中所对应的 非零元素的值 赋值给X { if((i==M->data[p].row)&&(j==M->data[p].col))// 如果i是矩阵M中非零元素行,j是其列 { x=M->data[p].e;
课 程 设 计 报 告
课题名称 矩阵运算器 姓 名 学 院 系科班级 指导老师 日 期 2012年1月7日
目录
一、问题描述 ………………………………………………3 二、概要设计 ………………………………………………3
1抽象数据类型定 义………………………………………3 2程序包含模 块……………………………………………4 3函数调用关 系……………………………………………4
int rnum[20]; int mu,nu,tu; }TSMatrix;
//矩阵的行数,列数,非零元个数
2、矩阵的基本操作
int CreatSMatrix(TSMatrix *M) //创建稀疏矩阵 void OutputSMatrix(TSMatrix *M) //输出稀疏矩阵 int AddSMatrix(TSMatrix *M,TSMatrix *N,TSMatrix *Q)//矩阵相加 int SubMatrix (TSMatrix *M,TSMatrix *N,TSMatrix *Q)//稀疏矩阵相减 int jishu(TSMatrix *M)// 找出矩阵各行的第一个非零元的位置 int Multiplication(TSMatrix *M,TSMatrix *N,TSMatrix *Q)//稀疏矩阵相乘 3、程序详细代码 # include <stdio.h> #include <iostream.h> # include <stdlib.h> # define MAXSIZE 1000 //非零元个数最大值 # define MAXRC 20 //假设矩阵的最大行数为100 # define OK 1 # define ERROR 0 typedef struct{ int row,col; //非零元的行标和列标 int e; //非零元素值 }Triple; typedef struct{//**********行逻辑连接的顺序表*******// Triple data[MAXSIZE+1]; //非零元三元组表,data[0] int rpos[MAXRC+1]; //各行第一个非零元的位置表 int rnum[20]; int mu,nu,tu; //矩阵的行数,列数,非零元个数 }TSMatrix; //*************矩阵的输入创建*********************// int CreatSMatrix(TSMatrix *M) { int k; //输入矩阵
(1)、 主程序模块,其中主函数为 main() {初始化图形界面; 读入用户选择信息; 根据用户选择执行相应模块; 关闭文件及图形界面; }; (2)、矩阵输入模块 (3)、矩阵输出模块 (4)、矩阵加法运算模块 (5)、矩阵减法运算模块 (6)、矩阵相乘运算模块 3、函数调用关系: 主函数 输入模块 加法运算模块 输出模块 减法运算模块 相乘运算模块
//********************输出矩阵************//
void OutputSMatrix(TSMatrix *M) { int a[21][21]={0};//初始化矩阵 int i,j,k,m,n; for(k=1;k<=M->tu;k++)//将稀疏矩阵中的非零元素用三元 组形式表示 { m=M->data[k].row; n=M->data[k].col; a[m][n]=M->data[k].e; }
}//for j }//for i return OK; }
int jishu(TSMatrix *M) { //找出矩阵各行的第一个非零元的位置 int arow,k=1; M->rpos[1]=1;//初始化矩阵M的第一行中的第一个非零元 素在其的序号 for(arow=1;arow<=M->mu;++arow){ M->rnum[arow]=0; while(M->data[k].row==arow){M->rnum[arow]++;k++;} M->rpos[arow+1]=M->rpos[arow]+M->rnum[arow];} return OK; }
算效率; 3. 两个矩 以“带行逻辑连接信息”的三元组顺序表表示稀疏矩阵,实现
阵的相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元 组表示, 而运算结果的矩阵则以通常的矩阵形式列出。
二.概要设计:
1、抽象数据类型定义如下: ADT SparseMatrix{ 数据对象D:D={aij|i=1,2,3…,m;j=1,2,3…,n; ai ∈ElemSet,m和n分别称为矩阵的行数和列数} 数据关系R: R={Row,Col} Row={<ai,j,ai,j+1>|1≤i≤m, 1≤j≤n-1} Col={<ai,ai+1,j>|1≤i≤m-1, 1≤j≤n} 基本操作 本程序中,用三元组顺序表作为存储结构。 (1)、CreatSMatrix (TSMatrix &M) 操作结果:创建矩阵M。 (2)、AddSMatrix(TSMatrix A,TSMatrix B,TSMatrix &C,int n) 初始条件:矩阵A和B的行数和列数对应相等。 操作结果:求矩阵A、B的和C=A+B。 (3)、SubMatrix (TSMatrix *a,TSMatrix *b) 初始条件:矩阵A和B的行数和列数对应相等。 操作结果:求矩阵A、B的和C=A+B。 (4)、MultiplicationMatrixPow (TSMatrix *a,TSMatrix *b,TSMatrix *c) 初始条件:矩阵A和B的行数和列数匹配 操作结果:求矩阵A、B的和C=A*B。 (5) OutputSMatrix(TSMatrix M) 初始条件:矩阵M已存在 操作结果:输出矩阵M 2、 本程序包含5个模块
相关文档
最新文档