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

来源:互联网 发布:闽江网络教学平台 编辑:程序博客网 时间:2024/06/06 13:19

问题及代码:

/*copyright (t) 2016,烟台大学计算机学院*All rights reserved.*文件名称:1.cpp*作者:常锐*完成日期:2016年10月27日*版本号:v1.0*问题描述:用压缩形式存储对称矩阵,实现下面的操作并测试    void 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[]);                      //销毁存储空间*输入描述:矩阵下三角部分*程序输出:对称矩阵*/

matrix.h:

#include <stdio.h>#include <malloc.h>#define N 4                                     //定义矩阵阶数为4void Init(int *&b);                             //为N阶对称矩阵初始化存储数据的一维数组Bint 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[]);                          //销毁存储空间

matrix.cpp:

#include "matrix.h"void Init(int *&b)                             //为N阶对称矩阵初始化存储数据的一维数组B{    b=(int *)malloc(sizeof(int)*(N*(N+1)/2));}int Value(int b[], int i, int j)               //返回存储在b[M]中,对应二维数组A[i][j]的值{    if(i>=j)        return b[(i*(i+1))/2+j];    else        return b[(j*(j+1))/2+i];}void Assign(int b[], int e, int i, int j)      //将e赋值给对应二维数组元素A[i][j],要存储到B[M]中{    if(i>=j)        b[i*(i+1)/2+j]=e;    else        b[j*(j+1)/2+i]=e;    return;}void Disp(int b[])                             //输出压缩存储在b中的对称矩阵{    int i,j;    for(i=0;i<N;i++)    {        for(j=0;j<N;j++)            printf("%4d",Value(b,i,j));        printf("\n");    }}void Destroy(int b[])                          //销毁存储空间{    free(b);}

main.cpp:

#include <stdio.h>#include "matrix.h"int main(){    int *b1;    int i,j,num;    Init(b1);    while(1)    {        printf("请输入对称矩阵(只需要输入下三角部分即可):\n");        for(i=0;i<N;i++)        {            printf("输入第%d行的%d个数据元素",i+1,i+1);            for(j=0;j<=i;j++)            {                scanf("%d",&num);                Assign(b1,num,i,j);            }        }        Disp(b1);        Destroy(b1);        printf("\n");    }    return 0;}

运行结果:


知识点总结:

        对称矩阵压缩存储的基本运算的实现

心得体会:

        通过此项目,结合建立算法库的知识,我加深了对对称矩阵概念及基本运算的理解,同时又不局限于C/C++的做法,运用数据结构的知识,将基本运算”一般化“,能广泛的用在各种语言中。


0 0