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

详细解析博客

对角矩阵的压缩存储_对角矩阵压缩存储-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放在充电器上并直立…

65、Flink 的 DataStream Connectors 概述

1&#xff09;概览 1.预定义的 Source 和 Sink 预定义的 data sources 支持从文件、目录、socket&#xff0c;以及 collections 和 iterators 中读取数据。 预定义的 data sinks 支持把数据写入文件、标准输出&#xff08;stdout&#xff09;、标准错误输出&#xff08;stde…

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

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

【C#】遍历文件夹及其子文件夹指定后缀文件

/// <summary>/// 遍历文件夹及其子文夹中指定后缀文件/// </summary>/// <param name"rootDirectory">文件夹路径</param>/// <param name"searchPattern">文件后缀</param>/// <returns></returns>publ…

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

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

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

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

C# 8.0 新语法的学习和使用

C# 8.0 是微软在 2019 年 9 月 23 日随 .NET Core 3.0 一同发布的一个重要版本更新&#xff0c;带来了许多新的语言特性和改进。本文将详细介绍 C# 8.0 的新语法&#xff0c;并通过实际应用案例展示这些新特性的使用方法。 目录 1. 可空引用类型 2. 异步流 3. 默认接口方…

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连接 端口映射 本地

编程是干什么的:揭示编程的奥秘与无限可能

编程是干什么的&#xff1a;揭示编程的奥秘与无限可能 在数字化时代的浪潮中&#xff0c;编程已成为一项炙手可热的技能。然而&#xff0c;对于许多人来说&#xff0c;编程仍然是一个充满神秘和困惑的领域。那么&#xff0c;编程是干什么的&#xff1f;本文将从四个方面、五个…

Linux串口设备的使用<ubuntu>

在 Ubuntu 系统中&#xff0c;使用 USB 转串口适配器通常涉及几个步骤&#xff0c;从确认适配器被系统识别到安装必要的驱动程序&#xff0c;以及实际使用该设备。这些适配器通常基于某些常见的芯片&#xff0c;如 FTDI、Prolific PL2303 或 Silicon Labs CP210x 等。下面是如何…

Python面试题:在 Python 中,如何连接并操作数据库?

在 Python 中&#xff0c;可以使用多种库来连接并操作数据库。常用的库有 sqlite3、psycopg2&#xff08;用于 PostgreSQL&#xff09;、PyMySQL&#xff08;用于 MySQL&#xff09;、SQLAlchemy&#xff08;一个 ORM 工具&#xff0c;支持多种数据库&#xff09;。下面以 SQLi…

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.固信软件 固信软件以其卓越的数据保护功能和可靠的安全性而著称。它采用先进的数据加密技术&…