三元组表示稀疏矩阵的转置(一般算法和快速算法)(2)

2019-08-29 00:44

}

if(j>3) //控制跳出死循环 {

printf(\本次输入失败!\

return ERROR; }

printf(\按行序输入第%d个非零元素所在的行(1~%d)列(1~%d)值:scanf(\k=0;

if(m<1||m>M.mu||n<1||n>M.nu) //行或列超出范围 k=1;

if(m

\

k=1; }while(k); M.data[i].i=m; M.data[i].j=n;

M.data[i].e=e; } //end for printf(\return(OK);

(3)销毁矩阵

void DestroySMatrix(RLSMatrix &M) //销毁稀疏矩阵M {

M.mu=0;

M.nu=0; M.tu=0;

}

(4)遍历矩阵

void PrinRLSMatrix(RLSMatrix M) //遍历稀疏矩阵 M {

int i;

printf(\稀疏矩阵对应的三元组表为:\\n\\n\printf(\行 列 元素值、\\n\\n\

for(i=1;i<=M.tu;i++) printf(\printf(\

}

(5)打印矩阵函数

void print(RLSMatrix A) //打印矩阵函数,以通常形式输出矩阵 {

int k=1,a,b;

printf(\稀疏矩阵的通常形式为:\\n\\n\

int M[MAXSIZE][MAXSIZE];

6

for(a=0;a

for(a=0;a

printf(\ | \

for(b=0;b

M[A.data[k].i-1][A.data[k].j-1]=A.data[k].e; k++;

for(b=0;b

while(k<=A.tu)

}

}

(6)工作区函数,显示程序菜单 void showtip() //菜单 {

printf(\ ********************请选择要执行的操作

********************\\n\\n\ printf(\ 1 采用一般算法实现 \\n\\n\ printf(\ 2 采用快速转置的算法实现 \\n\\n\ printf(\

**********************************************************\\n\}

(7)矩阵的转置(一般算法)

TransposeSMatrix(RLSMatrix M,RLSMatrix &T) //求稀疏矩阵M的转置矩阵T {

int p,q,col; T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(T.tu) {

q=1;

for(col=1;col<=M.nu;++col) //按列序求转置

for(p=1;p<=M.tu;++p)

if(M.data[p].j==col) { T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e;

7

}

}

++q;

}

return OK;

(8)快速转置算法

采用此算法时引用两个辅助数组num[],cpot[], num[col]表示矩阵M中第col列中非零元的个数,cpot[col]指示M中第col列的第一个非零元在b.data中的恰当位置。(即指M中每一列的第一个非零元在B中表示为第几个非零元) FastTransposeSMatrix(TSMatrix M,TSMatrix &T) {

int p,q,t,col,*num,*cpot;

num=(int*)malloc((M.nu+1)*sizeof(int)); cpot=(int*)malloc((M.nu+1)*sizeof(int)); T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(T.tu) {

for(col=1;col<=M.nu;++col)

num[col]=0;

for(t=1;t<=M.tu;++t) ++num[M.data[t].j]; cpot[1]=1;

for(col=2;col<=M.nu;++col)

cpot[col]=cpot[col-1]+num[col-1]; printf(\辅助数组的值为:\\n\\n\printf(\列号:\

for(t=1;t<=M.nu;++t) printf(\

printf(\printf(\

for(t=1;t<=M.nu;++t) printf(\printf(\printf(\for(t=1;t<=M.nu;++t) printf(\printf(\for(p=1;p<=M.tu;++p) {

col=M.data[p].j; q=cpot[col];

T.data[q].i=M.data[p].j;

8

}

}

}

T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++cpot[col];

free(num); free(cpot); return OK;

五、测试分析

系统运行后显示主菜单,提示用户选择使用何种算法,如图所示。

图5——1 (主菜单)

5.1 一般算法

用户根据需要选择算法。 输入1,选择采用一般算法实现矩阵的转置。

图 5——2

提示用户创建矩阵A,输入矩阵A的行列值以及非零元个数,用户输入 3 4 5并回车(表示创建一个3行4列有5个非零元的稀疏矩阵),系统然后会提示用户输入非零元素对应的行、列、值

图5——3

输入完成后 回车 , 系统执行矩阵转置功能,得到结果,如图

9

(矩阵A对应的三元组表) (转置矩阵B对应的三元组表) (以阵列形式表示B) 图5——4 图5——5 图5——6

5.2 快速转置算法

用户若输入2,选择使用快速转置方法来实现

图5——7 输入数据后回车,得到结果如图:

(矩阵A对应的三元组表) (辅助数组的值) (B的三元组表及其阵列形式) 图5——8 图5——9 图5——10

5.3 当用户输入3时,运用两种算法,输出采用不同算法运算的过程及结果。

本次转置操作执行完毕后,下面附有另一个菜单选项,提示用户是否继续输入其他矩阵,1表示继续输入不同的矩阵再次执行如上转置操作,0表示不继续输入,操作结束。如图:

10


三元组表示稀疏矩阵的转置(一般算法和快速算法)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:企业并购目标企业价值评估方法研究 —以吉利并购沃尔沃公司为例

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: