特殊矩阵的压缩存储_第1页
特殊矩阵的压缩存储_第2页
特殊矩阵的压缩存储_第3页
特殊矩阵的压缩存储_第4页
特殊矩阵的压缩存储_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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&

3、lt;stdio.h>#include <stdlib.h> static shangsanjiao(int n)int i,j,k,z,g;int L100100,SA100;printf("请输入您要压缩矩阵的行列数n");scanf("%d",&n);printf("请输入您的矩阵内元素:n");for(i=1;i<n+1;i+)for(j=1;j<n+1;j+)scanf("%d",&Lij);if(i<=j)k=j*(j-1)/2+i-1;elsek=n

4、*(n+1)/2;SAk=Lij;printf("您输入的矩阵为:n");for(i=1;i<n+1;i+)for(j=1;j<n+1;j+)printf("%d ",Lij);printf("n");printf("压缩存储后:n");for(k=0;k<n*(n+1)/2+1;k+)printf("%d %dn",k,SAk);printf("若要读取矩阵的值请输入'100'退出输入'000'。n");scanf(&quo

5、t;%d",&z);for(g=0;g<1000;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("继续

6、请输入'100'退出输入'000'。n");scanf("%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;i<n+1;i+)for(j=1;j<n+1;j+)scanf("%d",&Lij);i

7、f(i>=j)k=i*(i-1)/2+j-1;elsek=j*(j-1)/2+i-1;SAk=Lij;printf("您输入的矩阵为:n");for(i=1;i<n+1;i+)for(j=1;j<n+1;j+)printf("%d ",Lij);printf("n");printf("压缩存储后:n");for(k=0;k<n*(n+1)/2;k+)printf("%d %dn",k,SAk);printf("若要读取矩阵的值请输入'100'退出

8、输入'000'。n");scanf("%d",&z);for(g=0;g<1000;g+)while(z=100)printf("请您输入未压缩时所在行数:n");scanf("%d",&i);printf("请您输入未压缩时所在列数:n");scanf("%d",&j);if(i>=j)k=i*(i-1)/2+j-1;elsek=j*(j-1)/2+i-1;printf("该地址的值为:n");printf(&q

9、uot;%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);printf("请输入您的矩阵内元素:n");for(i=1;i<n+1;i+)for(j=1;j&

10、lt;n+1;j+)scanf("%d",&Lij);if(i>=j)k=i*(i-1)/2+j-1;elsek=n*(n+1)/2;SAk=Lij;printf("您输入的矩阵为:n");for(i=1;i<n+1;i+)for(j=1;j<n+1;j+)printf("%d ",Lij);printf("n");printf("压缩存储后:n");for(k=0;k<n*(n+1)/2+1;k+)printf("%d %dn",k,SAk)

11、;printf("若要读取矩阵的值请输入'100'退出输入'000'。n");scanf("%d",&z);for(g=0;g<1000;g+)while(z=100)printf("请您输入未压缩时所在行数:n");scanf("%d",&i);printf("请您输入未压缩时所在列数:n");scanf("%d",&j);if(i>=j)k=i*(i-1)/2+j-1;elsek=n*(n+1)/2;pr

12、intf("该地址的值为: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;d<100;d+)printf("请选择您要存储的特殊矩阵类型:n"); printf("1:对称矩阵 2:上三角矩阵 3:下三角矩阵n");printf("退出请输入101

13、n");scanf("%d",&m);if(m=1) duichen(n);else if(m=2) shangsanjiao(n);else if(m=3) xiasanjiao(n);else if(m=101) break;else printf("对不起您输入的选号错误。n");4 调试分析主要遇到以下几个问题:1.代码语法错误。2。函数调用错误。3.c+软件使用不熟练。5 测试结果图5.1 选择矩阵类型图5.2 对称矩阵图5.3 下三角矩阵5.4 上三角矩阵6 总结经过一周的奋斗,这次数据结构的课程设计终于做完了。通过这次设计

14、我们也着实又感受了一次编程的乐趣,从中也学到了不少知识。感受最深的一点是:以前用编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。现在编程感觉完全不同了。在编写一个程序之前,先对这个课程设计进行了一下分析,将每个要求都花了一下算法流程图,使得自己的思路更加的清晰了 。 然后进行编程,不断的在电脑上调试程序,终于完成了此次的课程设计。另外,我还体会到深刻理解数据结构的重要性。只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。通过这次课程设计逐渐提高了自己的程序设计和调试能力,我以前对算法一直很害怕,总是看不明白究竟这程序中间的过程是怎么进行的。在这次实验

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论