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

详细解析博客

对角矩阵的压缩存储_对角矩阵压缩存储-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);}}elseif(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);}}elseif(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

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

充电桩语音芯片方案选型:让充电体验更智能化

在新能源汽车日益普及的今天&#xff0c;充电桩作为其“加油站”般的存在&#xff0c;其智能化、人性化的设计显得尤为重要。而语音芯片&#xff0c;正是这一智能化趋势下的重要一环。 一、NV020C语音芯片概述 NV020C是一款性能稳定的语音芯片&#xff0c;无需任何外围电路&…

【C++】类和面向对象很懵?其实很简单

有不少朋友会遇到这种情况&#xff0c;在学完C入门的一些知识后&#xff0c;就开始接触类和面向对象的概念&#xff0c;大家去看书、文章的时候都会先抛出一大堆的概念&#xff0c;导致我们听得很懵。那么这篇文章将言简意赅&#xff0c;理解类和面向对象其实很简单&#xff01…

apple watch程序出错 Cannot launch apps while in nightstand mode

开发的时候运行apple watch程序出错&#xff1a; ailure Reason: The request was denied by service delegate (IOSSHLMainWorkspace) for reason: Busy ("Cannot launch apps while in nightstand mode"). 这是因为&#xff1a; 将Apple Watch放在充电器上并直立…

.net C# 使用网易163邮箱搭建smtp服务,实现发送邮件功能

功能描述&#xff1a;使用邮箱验证实现用户注册激活和找回密码。邮箱选择网易163作为smtp服务器。 真实测试情况&#xff1a;第一种&#xff1a;大部分服务器运行商的25端口默认是封禁的&#xff0c;可以联系运营商进行25端口解封&#xff0c;解封之后可以使用25端口。第二种&…

matlab R2016b安装cplex12.6,测试时cplex出现出现内部错误的解决方法

问题场景 网上搜索matlabyalmipcplex的安装教程&#xff0c;跟着步骤操作即可&#xff0c;假如都安装好了&#xff0c;在matlab中测试安装是否成功&#xff0c;出现以下问题&#xff1a; 1、matlab中设置路径中添加了yalmip和cplex路径&#xff0c;在命令窗口中输入yalmiptest…

视频号矩阵系统源码,实现AI自动生成文案和自动回复私信评论,支持多个短视频平台

在当今短视频蓬勃发展的时代&#xff0c;视频号矩阵系统源码成为了自媒体人争相探索的宝藏。这一强大的技术工具不仅能帮助我们高效管理多个短视频平台&#xff0c;更能通过AI智能生成文案和自动回复私信评论&#xff0c;为自媒体运营带来前所未有的便利与效率。 一、视频号矩…

Xshll连接服务器【过程记录】

背景&目标 开学老师提供了一款服务器&#xff0c;可以网页端打开&#xff0c;但是不可进行上传文件、复制黏贴指令。 希望连接Xshll进行更有效的学习活动&#xff01; 配置过程 一、已知信息 二、配置 使用第一部分&#xff0c;先打通隧道。 【选择公钥时&#xff0c;没…

CTF php RCE (四)

0x08 取反以及异或、或 这两个东西呢相当的好玩&#xff0c;也能够达到一下小极限的操作 <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$…

【游戏客户端】大话slg玩法架构(二)背景地图

【游戏客户端】大话slg玩法架构&#xff08;二&#xff09;背景地图 大家好&#xff0c;我是Lampard家杰~~ 今天我们继续给大家分享SLG玩法的实现架构&#xff0c;关于SLG玩法的介绍可以参考这篇上一篇文章&#xff1a;【游戏客户端】制作率土之滨Like玩法 PS&#xff1a;和之前…

Linux+InternStudio 关卡

ssh连接 端口映射 本地

FlashAttention/ PagedAttention原理,大模型加速

1.1 GPU 硬件特点 由于 FlashAttention 计算 self-attention 的主要关键是有效的硬件使用&#xff0c;所以了解GPU内存和各种操作的性能特征是很有必要的。 以 A100 (40GB HBM) 为例&#xff0c;下面显示其内存层次结构的粗略图。SRAM内存分布在108个流式多处理器(SMs)上&…

基于 BERT 的非结构化领域文本知识抽取

文章目录 题目摘要方法实验 题目 食品测试的大型语言模型 论文地址&#xff1a;https://arxiv.org/abs/2103.00728 摘要 随着知识图谱技术的发展和商业应用的普及&#xff0c;从各类非结构化领域文本中提取出知识图谱实体及关系数据的需求日益增加。这使得针对领域文本的自动化…

千呼新零售2.0-OCR图像识别采购单视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

2024年公司加密软件推荐TOP10|公司最佳数据防泄密方案!

在当今数字化信息爆炸的时代&#xff0c;保护公司的数据免受泄密威胁至关重要。选择一款适合的加密软件不仅可以有效防止数据泄露&#xff0c;还能保障公司的商业机密和客户隐私。 1.固信软件 固信软件以其卓越的数据保护功能和可靠的安全性而著称。它采用先进的数据加密技术&…

springboot农产品商城-计算机毕业设计源码46732

摘 要 随着社会经济的发展和人们消费观念的升级&#xff0c;农产品电商行业逐渐壮大。但传统的农产品销售模式存在信息不透明、中间环节复杂等问题&#xff0c;而微信小程序作为一种便捷的移动应用平台&#xff0c;为农产品商城的建设提供了新的可能性。通过微信小程序的设计与…

九.核心动画 - 显式动画

引言 本篇博客紧接着上一篇的隐式动画开始介绍显式动画。隐式动画是创建动态页面的一种简单的直接的方式&#xff0c;也是UIKit的动画机制基础。但是它并不能涵盖所有的动画类型。 显式动画 接下来我们就来研究另外一种动画显式动画&#xff0c;它能够对一些属性做指定的动画…

常用知识碎片 Vue3 ref和reactive (内含其他常用知识)

目录 ref和reactive ref reactive 总结&#xff1a; setup语法糖 语法糖是啥&#xff1f; Vue3 setup语法糖 Vue3 不使用setup语法糖示例&#xff1a; Vue3 使用setup语法糖示例&#xff1a; ref和eative主要区别 ref和reactive 在 Vue 3 中&#xff0c;ref 和 reac…

品牌渠道管控力度的平衡艺术

渠道管控力度要如何把握呢&#xff1f;是不是管控越严格就一定越好&#xff1f;例如&#xff0c;发现一次低价就处以高额罚款&#xff0c;发现一次窜货也重罚&#xff0c;其实处罚是对低价管控较为直接的一种方式&#xff0c;但并非处罚越重就一定能取得良好的管控效果。 比如品…

Java 中的 switch 语句:类型支持与限制

Java 中的 switch 语句&#xff1a;类型支持与限制 1、switch 语句支持的数据类型2、switch 语句不支持的数据类型3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在 Java 中&#xff0c;switch 语句是一种用于多分支选择的控制结构…

如何使用FreeFileSync:一款免费且专业的数据备份与文件同步软件

数据的重要性不言而喻&#xff0c;因此&#xff0c;定期做数据备份已经是每一个人的基本工作习惯了。 FreeFileSync 是一款强大专业且免费开源的 文件夹对比/同步/备份 软件工具。FreeFileSync通过比较其内容&#xff0c;日期或文件大小上的一个或多个文件夹&#xff0c;然后根…