《特殊矩阵的压缩存储(共11页).doc》由会员分享,可在线阅读,更多相关《特殊矩阵的压缩存储(共11页).doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上数据结构课 程 设 计 报 告 书题 目: 特殊矩阵的压缩存储算法的实现 系 别: 计算机科学与技术 学 号: 学生姓名: 徐光辉 指导教师: 刘双红 完成日期: 2012年6月5日 专心-专注-专业目 录1 需求分析问题描述:对于特殊矩阵可以通过压缩存储减少存储空间。基本要求:1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值。2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值。2 概要设计程序流程图如下:开始选择矩阵类型输入矩阵元素结束输入101图2.1 程序流程图3详细设计3.1 详细设计思想特殊矩阵:值相同元素或者零元素分布有一定规
2、律的矩阵称为特殊矩阵 例:对称矩阵、 上(下)三角矩阵都是特殊矩阵。图3.1 特殊矩阵特殊矩阵压缩存储(以对称矩阵为例)对称矩阵是满足下面条件的n 阶矩阵: aij= aji 1= i,j= n图 3.2k= 0 1 2 3 4 5 6 n(n+1)/2-1 对称矩阵元素可以只存储下三角部分,共需 n(n+1)/2 个单元的空间( 三角矩阵的存储方式类似)。以一维数组sa0.n(n+1)/2-1作为n 阶对称矩阵A的存储结构A中任意一元素 aij与它的存储位置 sak 之间关系:图 3.3k= 0 1 2 3 4 5 6 n(n+1)/2-1 3.2 核心代码#include#include
3、static shangsanjiao(int n)int i,j,k,z,g;int L100100,SA100;printf(请输入您要压缩矩阵的行列数n);scanf(%d,&n);printf(请输入您的矩阵内元素:n);for(i=1;in+1;i+)for(j=1;jn+1;j+)scanf(%d,&Lij);if(i=j)k=j*(j-1)/2+i-1;elsek=n*(n+1)/2;SAk=Lij;printf(您输入的矩阵为:n);for(i=1;in+1;i+)for(j=1;jn+1;j+)printf(%d ,Lij);printf(n);printf(压缩存储后:n)
4、;for(k=0;kn*(n+1)/2+1;k+)printf(%d %dn,k,SAk);printf(若要读取矩阵的值请输入100退出输入000。n);scanf(%d,&z);for(g=0;g1000;g+)while(z=100)printf(请您输入未压缩时所在行数:n);scanf(%d,&i);printf(请您输入未压缩时所在列数:n);scanf(%d,&j);if(i=j)k=j*(j-1)/2+i-1;elsek=n*(n+1)/2;printf(该地址的值为:n);printf(%d n,SAk);z=1;printf(继续请输入100退出输入000。n);scanf
5、(%d,&z);break;static duichen(int n)int i,j,k,z,g;int L100100,SA100;printf(请输入您要压缩矩阵的行列数n);scanf(%d,&n);printf(请输入您的矩阵内元素:n);for(i=1;in+1;i+)for(j=1;j=j)k=i*(i-1)/2+j-1;elsek=j*(j-1)/2+i-1;SAk=Lij;printf(您输入的矩阵为:n);for(i=1;in+1;i+)for(j=1;jn+1;j+)printf(%d ,Lij);printf(n);printf(压缩存储后:n);for(k=0;kn*(
6、n+1)/2;k+)printf(%d %dn,k,SAk);printf(若要读取矩阵的值请输入100退出输入000。n);scanf(%d,&z);for(g=0;g=j)k=i*(i-1)/2+j-1;elsek=j*(j-1)/2+i-1;printf(该地址的值为:n);printf(%d n,SAk);z=1;printf(继续请输入100退出输入000。n);scanf(%d,&z);break;static xiasanjiao(int n)int i,j,k,z,g;int L100100,SA100;printf(请输入您要压缩矩阵的行列数n);scanf(%d,&n);p
7、rintf(请输入您的矩阵内元素:n);for(i=1;in+1;i+)for(j=1;j=j)k=i*(i-1)/2+j-1;elsek=n*(n+1)/2;SAk=Lij;printf(您输入的矩阵为:n);for(i=1;in+1;i+)for(j=1;jn+1;j+)printf(%d ,Lij);printf(n);printf(压缩存储后:n);for(k=0;kn*(n+1)/2+1;k+)printf(%d %dn,k,SAk);printf(若要读取矩阵的值请输入100退出输入000。n);scanf(%d,&z);for(g=0;g=j)k=i*(i-1)/2+j-1;el
8、sek=n*(n+1)/2;printf(该地址的值为:n);printf(%d n,SAk);z=1;printf(继续请输入100退出输入000。n);scanf(%d,&z);break;int main()int n,d;int m;for(d=0;d100;d+)printf(请选择您要存储的特殊矩阵类型:n); printf(1:对称矩阵 2:上三角矩阵 3:下三角矩阵n);printf(退出请输入101n);scanf(%d,&m);if(m=1) duichen(n);else if(m=2) shangsanjiao(n);else if(m=3) xiasanjiao(n)
9、;else if(m=101) break;else printf(对不起您输入的选号错误。n);4 调试分析主要遇到以下几个问题:1.代码语法错误。2。函数调用错误。3.c+软件使用不熟练。5 测试结果图5.1 选择矩阵类型图5.2 对称矩阵图5.3 下三角矩阵5.4 上三角矩阵6 总结经过一周的奋斗,这次数据结构的课程设计终于做完了。通过这次设计我们也着实又感受了一次编程的乐趣,从中也学到了不少知识。感受最深的一点是:以前用编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。现在编程感觉完全不同了。在编写一个程序之前,先对这个课
10、程设计进行了一下分析,将每个要求都花了一下算法流程图,使得自己的思路更加的清晰了 。 然后进行编程,不断的在电脑上调试程序,终于完成了此次的课程设计。另外,我还体会到深刻理解数据结构的重要性。只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。通过这次课程设计逐渐提高了自己的程序设计和调试能力,我以前对算法一直很害怕,总是看不明白究竟这程序中间的过程是怎么进行的。在这次实验中我终于克服了这一障碍,一遍遍在心中自己默默的走,终于弄明白了,真的是功夫不负有心人啊! 这次试验也让我看到了自己的不足,还是不太用模板类。还有许多关于C语言的一些比较具体的东西还不太懂,需要进一步了解。这次试验还让我意识到只有不断的在电脑上调试程序,自己的水平才能得到提高。我会继续我们的兴趣编写程序的,相信在越来越多的尝试之后,自己会不断进步和提高。指导教师评语程序成绩: 报告成绩: 综合成绩: 指导教师姓名: 批 改 日 期: 年 月 日