小试牛刀--对称矩阵压缩存储

学习贺利坚老师对称矩阵压缩存储

数据结构实践——压缩存储的对称矩阵的运算_计算压缩存储对称矩阵 a 与向量 b 的乘积-CSDN博客

本人解析博客

矩阵存储和特殊矩阵的压缩存储_n阶对称矩阵压缩-CSDN博客

版本更新日志

V1.0: 对老师代码进行模仿 , 我进行名字优化, 思路代码注释

功能函数

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

具体功能函数实现:

#define max_wide 4
/**************************************************
函数名: Init_symmetrical_matrix
功  能: 初始化对称矩阵,为其分配存储空间
参  数: int *&matrix:给对应矩阵分配空间
返回值: 无
**************************************************/
void Init_symmetrical_matrix(int *&matrix)
{
    //给地址分配空间
    matrix = (int*)malloc(sizeof(int)*(max_wide*(max_wide+1)/2));
}
/**************************************************
函数名: get_Value_symmetrical_matrix
功  能: 得到对称矩阵的值(利用压缩存储,所以通过一维数组转换)
参  数: (1)int matrix[]:对称矩阵
        (2)int x:对应的横坐标
        (3)int y:纵坐标
返回值: int:对应坐标的值
**************************************************/
int get_Value_symmetrical_matrix(int matrix[],int x,int y)
{
    if(x >= y)
    {
        return matrix[x*(x+1)/2+y];
    }
    else
    {
        return matrix[y*(y+1)/2+x];
    }
}
/**************************************************
函数名: Assign_symmetrical_matrix
功  能: 给对称压缩矩阵赋值(和取值一样,也是通过一维数组转换)
参  数: (1)int matrix[]:要赋值的对称压缩矩阵
        (2)int input_value:要赋的值
        (3)int x:对应的横坐标
        (4)int y:对应的纵坐标
返回值: 无
**************************************************/
void Assign_symmetrical_matrix(int matrix[],int input_value,int x,int y)
{
    if(x >= y)
    {
        matrix[x*(x+1)/2+y] = input_value;
    }
    else
    {
        matrix[y*(y+1)/2+x] = input_value;
    }
    return;
}
/**************************************************
函数名: Display_symmetrical_matrix
功  能: 输出展示对称矩阵(调用取值函数)
参  数: int matrix[]:要展示的对称矩阵
返回值: 无
**************************************************/
void Display_symmetrical_matrix(int matrix[])
{
    int i,j;
    for(i = 0; i<max_wide; i++)
    {
        for(j = 0; j<max_wide; j++)
        {
            printf("%5d",get_Value_symmetrical_matrix(matrix,i,j));
        }
        printf("\n\n");
    }
}
/**************************************************
函数名: Destroy_symmetrical_matrix
功  能: 销毁对称压缩矩阵的空间
参  数: int matrix[]:要销毁的压缩矩阵
返回值: 无
**************************************************/
void Destroy_symmetrical_matrix(int matrix[])
{
    free(matrix);
}

main函数调用

int main()
{
    int *matrix_test1;
    int line,row;//行,列
    int input_value;
    Init_symmetrical_matrix(matrix_test1);
    printf("\n请输入对称矩阵(只需要输出下三角部分即可)\n");
    for(line = 0; line < max_wide; line++)
    {
        printf("\n请输入第%d行的%d个数据元素:\n",line+1,line+1);
        for(row = 0; row <= line; row++)
        {
            scanf("%d",&input_value);
            Assign_symmetrical_matrix(matrix_test1,input_value,line,row);
        }
    }
    Display_symmetrical_matrix(matrix_test1);
    Destroy_symmetrical_matrix(matrix_test1);
    return 0;
}

main.cpp(包含功能函数)

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

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

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


int main()
{
    int *matrix_test1;
    int line,row;//行,列
    int input_value;
    Init_symmetrical_matrix(matrix_test1);
    printf("\n请输入对称矩阵(只需要输出下三角部分即可)\n");
    for(line = 0; line < max_wide; line++)
    {
        printf("\n请输入第%d行的%d个数据元素:\n",line+1,line+1);
        for(row = 0; row <= line; row++)
        {
            scanf("%d",&input_value);
            Assign_symmetrical_matrix(matrix_test1,input_value,line,row);
        }
    }
    Display_symmetrical_matrix(matrix_test1);
    Destroy_symmetrical_matrix(matrix_test1);
    return 0;
}

运行演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/787725.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

主流电商平台营销中大数据的应用◆

随着经济的不断发展&#xff0c;网络信息技术不断加强&#xff0c;电子商务和大数据的蓬勃发展极大地方便了人们的生活。本文章主要阐述大数据分析与电商营销的含义、大数据分析在电子商务营销中的应用&#xff0c;以及该应用的作用和存在哪些不足及解决方法。探究大数据分析在…

数据库基础复习

数据库简介 关系型数据库&#xff1a;Mysql 、Oracle 、SqlServer.... DB2 达梦 非关系型数据库&#xff1a;Redis 、MongoDB... MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管…

TPM (Trusted Platform Module)发展历史『机密计算、隐私计算』

文章目录 TPM分析笔记&#xff08;一&#xff09; TPM历史TPM的历史为什么选择用TPM&#xff1f; TPM 1.1b到1.2的发展历史TPM 1.1bTPM 1.2 TPM由1.2发展到2.0版本安全需求变化TPM 2.0的设计改进 TPM 2.0规范的开发历程TPM的标准TPM的常见用途发展历程小结 TPM分析笔记&#xf…

平安养老险安徽分公司“7·8保险宣传”走进企业

近日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;安徽分公司以“78全国公众宣传日”“保险&#xff0c;让每一步前行更有底气”为主题&#xff0c;走进某大型企业开展消费者权益保护专题教育宣传活动。 本次活动旨在向企业员工普及金…

【自学网络安全】:安全策略与用户认证综合实验

实验拓扑图&#xff1a; 实验任务&#xff1a; 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00-18:00)可以访问&#xff0c;生产区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设备10.0.2.10不允许访问Dmz区…

KIVY Button¶

Button — Kivy 2.3.0 documentation Button Jump to API ⇓ Module: kivy.uix.button Added in 1.0.0 The Button is a Label with associated actions that are triggered when the button is pressed (or released after a click/touch). To configure the button, the s…

HTML【详解】表格 table 标签(table的属性,语义化表格,简易表格,合并单元格)

html 中的表格 <table> 由行 <tr> 组成&#xff0c;每行由单元格 <td> 组成。 所以表格是由行组成&#xff08;行由列组成&#xff09;&#xff0c;而不是由行和列组成。 table 标签 display: table &#xff0c;属于块级元素。 table 的属性 border&#…

基于Java+SpringMvc+Vue技术的智慧校园系统设计与实现

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

5G(NR) NTN 卫星组网架构

5G(NR) NTN 卫星组网架构 参考 3GPP TR 38.821 5G NTN 技术适用于高轨、低轨等多种星座部署场景&#xff0c;是实现星地网络融合发展的可行技术路线。5G NTN 网络分为用户段、空间段和地面段三部分。其中用户段由各种用户终端组成&#xff0c;包括手持、便携站、嵌入式终端、车…

uniapp内置组件uni.navigateTo跳转后页面空白问题解决

文章目录 导文空白问题 导文 在h5上跳转正常 但是在小程序里面跳转有问题 无任何报错 页面跳转地址显示正确&#xff0c;但页面内容为空 空白问题 控制台&#xff1a; 问题解决&#xff1a; 方法1&#xff1a; 可能是没有注册的问题&#xff0c;把没注册的页面 注册一下。 方…

互助学习平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;课程信息管理&#xff0c;课程分类管理&#xff0c;课程评价管理&#xff0c;学习计划管理&#xff0c;留言板管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;课程信息…

离线运行Llama3:本地部署终极指南_liama2 本地部署

4月18日&#xff0c;Meta在官方博客官宣了Llama3&#xff0c;标志着人工智能领域迈向了一个重要的飞跃。经过笔者的个人体验&#xff0c;Llama3 8B效果已经超越GPT-3.5&#xff0c;最为重要的是&#xff0c;Llama3是开源的&#xff0c;我们可以自己部署&#xff01; 本文和大家…

智能眼镜火热发展 AI+AR或将成为主流趋势?

日前&#xff0c;The Verge 发布消息称&#xff0c;AI 智能音频眼镜 Ray-Ban Meta 的销量可能已突破 100 万。Meta 在博客中也指出&#xff0c;Ray-Ban Meta 取得了超预期的市场表现&#xff0c;眼镜的销售速度比生产速度还要快&#xff0c;目前团队正着手于推出更多新款式。Ra…

产品推荐| 立錡低耗电器件:线性稳压器、Buck 和 Boost 转换器

想让电池用得更久、利用好它的每一份电力&#xff1f;低静态电流的电源转换器是你的必然选择。立錡深谙电源管理之道&#xff0c;为你备好了低耗电的各种产品&#xff0c;其中包括低压差线性稳压器、Buck 转换器和 Boost 转换器&#xff0c;最低消耗仅有 360nA&#xff0c;是无…

Linux多进程和多线程(八)多线程

多线程 线程定义线程与进程线程资源 线程相关命令 pidstat 命令 top 命令ps 命令常见的并发方案 1. 多进程模式2. 多线程模式 创建线程 1. pthread_create() 示例:创建一个线程 2. pthread_exit() 退出线程3. pthread_join() 等待线程结束 示例: 线程分离 创建多个线程 示例 1:…

构造二进制字符串

目录 LeetCode3221 生成不含相邻零的二进制字符串 #include <iostream> #include <vector> using namespace std;void dfs(string s,int n,vector<string>& res){if(s.size()n){res.push_back(s);return;}dfs(s"0",n,res);dfs(s"1"…

Invoice OCR

Invoice OCR 发票识别 其他类型ORC&#xff1a; DIPS_YTPC OCR-CSDN博客

前端面试题31(TCP与UDP区别)

TCP (Transmission Control Protocol) 和 UDP (User Datagram Protocol) 是两种在网络通信中常用的传输层协议&#xff0c;它们在多个方面存在显著差异&#xff0c;主要体现在以下几个方面&#xff1a; 连接方式&#xff1a; TCP 是面向连接的协议。在数据传输开始之前&#xf…

怎么将图片旋转30度?旋转图片的几种方法推荐

怎么将图片旋转30度&#xff1f;在创作过程中&#xff0c;我们常常需要处理图片的镜像效果&#xff0c;确保其视觉效果和构图都达到最佳状态。镜像效果的合理运用不仅可以解决视觉单调的问题&#xff0c;还能在艺术作品中吸引观者的注意力。此外&#xff0c;镜像可以有效地调整…

【LeetCode刷题笔记】LeetCode.11.盛最多水的容器

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…