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

一、设计要求1.1问题描述稀疏矩阵是指那些多数元素为零的矩阵。利用稀疏特点进行存储和计算可以大大节省存储空间,提高计算效率。求一个稀疏矩阵A的转置矩阵B。1.2需求分析(1)以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现稀疏矩阵的转置运算。(2)稀疏矩阵的输入形式采用三元组表示,运算结果则以通常的阵列形式列出。(3)首先提示用户输入矩阵的行数、列数、非零元个数,再采用三元组表示方法输入矩阵,然后进行转置运算,该系统可以采用两种方法,一种为一般算法,另一种为快速转置算法。(4)程序需要给出菜单项,用户按照菜单提示进行相应的操作。二、概要设计2.1存储结构设计采用“带行逻辑链接信息”的三元组顺序表表示矩阵的存储结构。三元组定义为:typedefstruct{inti;//非零元的行下标intj;//非零元的列下标ElemTypee;//非零元素值}Triple;矩阵定义为:Typedefstruct{Tripledata[MAXSIZE+1];//非零元三元组表intrpos[MAXRC+1];//各行第一个非零元的位置表intmu,nu,tu;//矩阵的行数、列数和非零元个数}RLSMatrix;例如有矩阵A,它与其三元组表的对应关系如图---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---2.2系统功能设计本系统通过菜单提示用户首先选择稀疏矩阵转置方法,然后提示用户采用三元组表示法输入数据创建一个稀疏矩阵,再进行矩阵的转置操作,并以通常的阵列形式输出结果。主要实现以下功能。(1)创建稀疏矩阵。采用带行逻辑连接信息的三元组表表示法,提示用户输入矩阵的行数、列数、非零元个数以及各非零元所在的行、列、值。(2)矩阵转置。<1>采用一般算法进行矩阵的转置操作,再以阵列形式输出转置矩阵B。<2>采用快速转置的方法完成此操作,并以阵列形式输出转置矩阵B。三、模块设计3.1模块设计程序包括两个模块:主程序模块、矩阵运算模块。3.2系统子程序及其功能设计系统共设置了8个子程序,各子程序的函数名及功能说明如下。(1)CreateSMatrix(RLSMatrix&M)//创建稀疏矩阵(2)voidDestroySMatrix(RLSMatrix&M)//销毁稀疏矩阵(3)voidPrinRLSMatrix(RLSMatrixM)//遍历稀疏矩阵(4)voidprint(RLSMatrixA)//打印矩阵函数,输出以阵列形式表示的矩阵(5)TransposeSMatrix(RLSMatrixM,RLSMatrix&T)//求稀疏矩阵的转置的一般算法(6)FastTransposeSMatrix(RLSMatrixM,RLSMatrix&T)//快速转置算法(7)voidshowtip()//工作区函数,显示程序菜单---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---(8)voidmain()//主函数3.3程序主要调用关系图四、详细设计4.1数据类型定义采用矩阵“带行逻辑连接信息”的三元组顺序表存储结构。4.2系统主要子程序详细设计(1)主函数:voidmain(){intresult;intj;RLSMatrixA,B;COORDCo={0,0};DWORDWrite;SetConsoleTitle("稀疏矩阵的转置");HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hOut,FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY);FillConsoleOutputAttribute(hOut,FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY,100000000,Co,&Write);///windows的API函数,用来设置控制台标题及颜色。do{showtip();//调用菜单函数inti;scanf("%d",&i);switch(i){---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---8main1234567case1:printf("创建矩阵A:");if((result=CreateSMatrix(A))==0)exit(ERROR);printf("矩阵A的三元组表为:\n");PrinRLSMatrix(A);printf("求A的转置矩阵B(一般算法):\n");TransposeSMatrix(A,B);printf("矩阵B的三元组表为:\n");PrinRLSMatrix(B);printf("以通常的阵列形式输出转置前的矩阵A:\n");print(A);printf("\n\n");printf("以通常的阵列形式输出转置后的矩阵B:\n");print(B);DestroySMatrix(B);printf("\n\n");break;case2:printf("创建矩阵A:");if((result=CreateSMatrix(A))==0)exit(ERROR);printf("矩阵A的三元组表为:\n");PrinRLSMatrix(A);printf("求A的转置矩阵B(快速转置):\n");FastTransposeSMatrix(A,B);printf("矩阵B...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?