第九周项目2-对称矩阵压缩存储的实现与应用

来源:互联网 发布:压缩软件for mac 编辑:程序博客网 时间:2024/06/05 06:16

问题及代码:

/*    烟台大学计算机与控制工程学院              作    者:房斐    完成日期:2016年10月27日           问题描述:用压缩形式存储对称矩阵,实现下面的操作并测试         void Init(int *&b);//为N阶对称矩阵初始化存储数据的一维数组B         int Value(int b[], int i, int j);//返回存储在b[M]中,对应        二维数组A[i][j]的值应二维数组元素A[i][j],要存储到B[M]中         void Disp(int b[]);//输出压缩存储在b中的对称矩阵         void Destroy(int b[]);//销毁存储空间 输入描述:下三角数据。 程序输出:矩阵的全体输出。 */  


 

#include <stdio.h>#include <malloc.h>#defineN 4void Init(int *&b); //为N阶对称矩阵初始化存储数据的一维数组B   int Value(int b[], int i, int j);  //返回存储在b[M]中,对应二维数组A[i][j]的值 void Assign(int b[], int e, int i, int j);  //将e赋值给对应二维数组元素A[i][j],要存储到B[M]中  void Disp(int b[]); //输出压缩存储在b中的对称矩阵 void Destroy(int b[]);//销毁存储空间    int main(){ int *b1; int i,j; int v; Init(b1); printf("请输入对称矩阵(只需要输入下三角部分即可)\n"); for(i=0;i<N;i++){printf("输入第%d行的%d个数据元素:",i+1,i+1); for(j=0;j<=i;j++) {   scanf("%d",&v);   Assign(b1,v,i,j); }} Disp(b1); Destroy(b1); return 0;}void Init(int *&b){b=(int *)malloc(sizeof(int)*N*(N+1)/2);}void Assign(int b[],int e,int i,int j){int k; if(i>j) { k=i*(i+1)/2+j; b[k]=e; } else if(i<=j) { k=j*(j+1)/2+i; b[k]=e; }}void Disp(int b[]){int i=0;int j=0; while(i<N) {   while(j<N)   {   printf("%4d",b[i*(i+1)/2+j]);   j++;   }   printf("\n");   j=0;   i++; }}void Destroy(int b[])  {      free(b);  }  


运行结果:

0 0
原创粉丝点击