您好,欢迎访问三七文档
上机实验报告学院:计算机与信息技术学院专业:计算机科学与技术(师范)课程名称:数据结构实验题目:三元组法稀疏矩阵的转置班级序号:师范1班学号:201421012731学生姓名:邓雪指导教师:杨红颖完成时间:2015年12月25号一、实验目的:(1)了解什么是三元组表和稀疏矩阵。(2)熟悉三元组的运用。(3)掌握稀疏矩阵按三元组法存储、创建、显示及转置。二、实验环境:Windows8.1MicrosoftVisualc++6.0三、实验内容及要求:将稀疏矩阵按照三元组法顺序存储,通过算法使矩阵转置并用三元组法输出转置后的矩阵。要求实验过程认真耐心。四、概要设计:若将表示稀疏矩阵的非零元素的三元组按行优先的顺序排列,则得到一个其结点都是三元组的线性表。为了确定一个唯一的矩阵,需要存储该矩阵的行数和列数,为了运算方便,将非零元素的个数与三元组表存储在一起。再进行矩阵转置,后用三元组表输出转置后的矩阵。五、代码#includestdio.h#includestdlib.h#definesmax16typedefintdatatype;//定义结构体typedefstruct{inti,j;//行列号datatypev;//元素值}node;//定义结构体typedefstruct{intm,n,t;//行数、列数、非零元素个数nodedata[smax];}spmatrix;//稀疏矩阵类型//建立矩阵spmatrix*CREATE(spmatrix*c){intk;printf(请输入矩阵的行数:);scanf(%d,&c-m);printf(请输入矩阵的列数:);scanf(%d,&c-n);printf(请输入矩阵的非零元个数:);scanf(%d,&c-t);printf(请输入三元组表:\n);for(k=0;kc-t;k++){scanf(%5d,&c-data[k].i);scanf(%5d,&c-data[k].j);scanf(%5d,&c-data[k].v);}returnc;}//稀疏矩阵的转置spmatrix*TRANSMAT(spmatrix*a){intano,bno,col;spmatrix*b;b=(spmatrix*)malloc(sizeof(spmatrix));b-m=a-n;b-n=a-m;b-t=a-t;if(b-t0){bno=0;for(col=0;cola-n;col++)for(ano=0;anoa-t;ano++)if(a-data[ano].j==col){b-data[bno].i=a-data[ano].j;b-data[bno].j=a-data[ano].i;b-data[bno].v=a-data[ano].v;bno++;}}returnb;}//输出voidPrint(spmatrix*a){intk;printf(转置后的三元组表:\n);for(k=0;ka-t;k++){printf(%5d,a-data[k].i);printf(%5d,a-data[k].j);printf(%5d,a-data[k].v);printf(\n);}}voidmain(){spmatrix*A;A=(spmatrix*)malloc(sizeof(spmatrix));CREATE(A);Print(TRANSMAT(A));printf(\n);}六、运行界面七、实验中遇到的问题及总结1.数据输入格式不对,导致数据没有输入完全程序就自动结束。经过细心检查解决了该问题。2.编写程序时将行和列写反导致转置后的矩阵结果错误。3.通过调试程序懂得了很多问题,锻炼了我的编程能力。八、参考文献《数据结构——用C语言描述》
本文标题:稀疏矩阵的转置
链接地址:https://www.777doc.com/doc-2150845 .html