牛刀小试--三元对角矩阵压缩存储

详细解析博客

对角矩阵的压缩存储_对角矩阵压缩存储-CSDN博客

功能函数:

//为N阶对角矩阵初始化成的一维数组分配空间
void Init_opposite_angles_matrix(int *&matrix);
//返回二维对角矩阵的值(压缩存取)
int get_Value_opposite_angles_matrix(int matrix[],int x,int y);
//把值传进二维对角矩阵矩阵(压缩存储)
void Assign_opposite_angles_matrix(int matrix[],int input_value,int x,int y);
//输出展示压缩存储的对角矩阵矩阵
void Display_opposite_angles_matrix(int matrix[]);
//销毁对角矩阵存储空间
void Destroy_opposite_angles_matrix(int matrix[]);

功能函数实现:

/**************************************************
函数名: Init_opposite_angles_matrix
功  能: 初始化对角矩阵,为其分配存储空间
参  数: int *&matrix:给对应矩阵分配空间
返回值: 无
**************************************************/
void Init_opposite_angles_matrix(int *&matrix)
{
    //给地址分配空间
    matrix = (int*)malloc(sizeof(int)*(3*max_wide-1));
}
/**************************************************
函数名: get_Value_opposite_angles_matrix
功  能: 得到对角矩阵的值(因为是压缩存储,所以需要转换)
参  数: (1)int matrix[]:对角矩阵矩阵存储数据的一维数组
        (2)int x:对应的横坐标
        (3)int y:纵坐标
返回值: int:对应坐标的值
**************************************************/
int get_Value_opposite_angles_matrix(int matrix[],int x,int y)
{
    if((y == x - 1) || (y == x) || (y == x+1)) //整合规律,也可分开
    {
        return matrix[2*x + y];
    }
    else
    {
        return matrix[3*max_wide - 2];  //数组尾
    }
}
/**************************************************
函数名: Assign_opposite_angles_matrix
功  能: 给压缩对角矩阵赋值(和取值一样,也是通过一维数组转换)
参  数: (1)int matrix[]:要赋值的对角压缩矩阵
        (2)int input_value:要赋的值
        (3)int x:对应的横坐标
        (4)int y:对应的纵坐标
返回值: 无
**************************************************/
void Assign_opposite_angles_matrix(int matrix[],int input_value,int x,int y)
{
    if((y == x - 1) || (y == x) || (y == x+1)) //整合规律,也可分开
    {
        matrix[2*x + y] = input_value;
    }
    else
    {
        matrix[3*max_wide - 2] = input_value;
    }
    return;
}
/**************************************************
函数名: Display_opposite_angles_matrix
功  能: 输出展示对角矩阵(调用取值函数)
参  数: int matrix[]:要展示的对角矩阵
返回值: 无
**************************************************/
void Display_opposite_angles_matrix(int matrix[])
{
    int i,j;
    for(i = 0; i<max_wide; i++)
    {
        for(j = 0; j<max_wide; j++)
        {
            printf("%5d",get_Value_opposite_angles_matrix(matrix,i,j));
        }
        printf("\n\n");
    }
}
/**************************************************
函数名: Destroy_opposite_angles_matrix
功  能: 销毁对角矩阵的空间
参  数: int matrix[]:要销毁的压缩对角矩阵
返回值: 无
**************************************************/
void Destroy_opposite_angles_matrix(int matrix[])
{
    free(matrix);
}

main函数调用:

int main()
{
    int *matrix_test1;
    int line,row;//行,列
    int input_value;
    Init_opposite_angles_matrix(matrix_test1);
    printf("\n请输入对角矩阵带状数据两侧的数据常量:\n");
    scanf("%d",&input_value);
    matrix_test1[3*max_wide-2] = input_value;
    printf("\n下面请输入对称矩阵上三角部分即可:\n");
    for(line = 0; line < max_wide; line++)
    {
        if(line == 0)
        {
            printf("\n请输入第%d行的%d个数据元素:\n",line+1,2);
            for(row = 0; row < 2; row++)
            {
                scanf("%d",&input_value);
                Assign_opposite_angles_matrix(matrix_test1,input_value,line,row);
            }
        }
        else
        if(line == (max_wide-1))
        {
            printf("\n请输入第%d行的%d个数据元素:\n",line+1,2);
            for(row = (max_wide-2); row < max_wide; row++)
            {
                scanf("%d",&input_value);
                Assign_opposite_angles_matrix(matrix_test1,input_value,line,row);
            }
        }
        else
        {
            printf("\n请输入第%d行的%d个数据元素:\n",line+1,3);
            for(row = line-1; row <= line+1; row++)
            {
                scanf("%d",&input_value);
                Assign_opposite_angles_matrix(matrix_test1,input_value,line,row);
            }
        }

    }
    Display_opposite_angles_matrix(matrix_test1);
    Destroy_opposite_angles_matrix(matrix_test1);
    return 0;
}

main.cpp完整函数代码(含功能函数)

#include <stdio.h>
#include <malloc.h>
#define max_wide 6

//为N阶对角矩阵初始化成的一维数组分配空间
void Init_opposite_angles_matrix(int *&matrix);
//返回二维对角矩阵的值(压缩存取)
int get_Value_opposite_angles_matrix(int matrix[],int x,int y);
//把值传进二维对角矩阵矩阵(压缩存储)
void Assign_opposite_angles_matrix(int matrix[],int input_value,int x,int y);
//输出展示压缩存储的对角矩阵矩阵
void Display_opposite_angles_matrix(int matrix[]);
//销毁对角矩阵存储空间
void Destroy_opposite_angles_matrix(int matrix[]);

/**************************************************
函数名: Init_opposite_angles_matrix
功  能: 初始化对角矩阵,为其分配存储空间
参  数: int *&matrix:给对应矩阵分配空间
返回值: 无
**************************************************/
void Init_opposite_angles_matrix(int *&matrix)
{
    //给地址分配空间
    matrix = (int*)malloc(sizeof(int)*(3*max_wide-1));
}
/**************************************************
函数名: get_Value_opposite_angles_matrix
功  能: 得到对角矩阵的值(因为是压缩存储,所以需要转换)
参  数: (1)int matrix[]:对角矩阵矩阵存储数据的一维数组
        (2)int x:对应的横坐标
        (3)int y:纵坐标
返回值: int:对应坐标的值
**************************************************/
int get_Value_opposite_angles_matrix(int matrix[],int x,int y)
{
    if((y == x - 1) || (y == x) || (y == x+1)) //整合规律,也可分开
    {
        return matrix[2*x + y];
    }
    else
    {
        return matrix[3*max_wide - 2];  //数组尾
    }
}
/**************************************************
函数名: Assign_opposite_angles_matrix
功  能: 给压缩对角矩阵赋值(和取值一样,也是通过一维数组转换)
参  数: (1)int matrix[]:要赋值的对角压缩矩阵
        (2)int input_value:要赋的值
        (3)int x:对应的横坐标
        (4)int y:对应的纵坐标
返回值: 无
**************************************************/
void Assign_opposite_angles_matrix(int matrix[],int input_value,int x,int y)
{
    if((y == x - 1) || (y == x) || (y == x+1)) //整合规律,也可分开
    {
        matrix[2*x + y] = input_value;
    }
    else
    {
        matrix[3*max_wide - 2] = input_value;
    }
    return;
}
/**************************************************
函数名: Display_opposite_angles_matrix
功  能: 输出展示对角矩阵(调用取值函数)
参  数: int matrix[]:要展示的对角矩阵
返回值: 无
**************************************************/
void Display_opposite_angles_matrix(int matrix[])
{
    int i,j;
    for(i = 0; i<max_wide; i++)
    {
        for(j = 0; j<max_wide; j++)
        {
            printf("%5d",get_Value_opposite_angles_matrix(matrix,i,j));
        }
        printf("\n\n");
    }
}
/**************************************************
函数名: Destroy_opposite_angles_matrix
功  能: 销毁对角矩阵的空间
参  数: int matrix[]:要销毁的压缩对角矩阵
返回值: 无
**************************************************/
void Destroy_opposite_angles_matrix(int matrix[])
{
    free(matrix);
}


int main()
{
    int *matrix_test1;
    int line,row;//行,列
    int input_value;
    Init_opposite_angles_matrix(matrix_test1);
    printf("\n请输入对角矩阵带状数据两侧的数据常量:\n");
    scanf("%d",&input_value);
    matrix_test1[3*max_wide-2] = input_value;
    printf("\n下面请输入对称矩阵上三角部分即可:\n");
    for(line = 0; line < max_wide; line++)
    {
        if(line == 0)
        {
            printf("\n请输入第%d行的%d个数据元素:\n",line+1,2);
            for(row = 0; row < 2; row++)
            {
                scanf("%d",&input_value);
                Assign_opposite_angles_matrix(matrix_test1,input_value,line,row);
            }
        }
        else
        if(line == (max_wide-1))
        {
            printf("\n请输入第%d行的%d个数据元素:\n",line+1,2);
            for(row = (max_wide-2); row < max_wide; row++)
            {
                scanf("%d",&input_value);
                Assign_opposite_angles_matrix(matrix_test1,input_value,line,row);
            }
        }
        else
        {
            printf("\n请输入第%d行的%d个数据元素:\n",line+1,3);
            for(row = line-1; row <= line+1; row++)
            {
                scanf("%d",&input_value);
                Assign_opposite_angles_matrix(matrix_test1,input_value,line,row);
            }
        }

    }
    Display_opposite_angles_matrix(matrix_test1);
    Destroy_opposite_angles_matrix(matrix_test1);
    return 0;
}

运行结果演示:

fa9577903b1e40a78357b3c8f4b92da6.png

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值