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

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

数据结构实践——压缩存储的对称矩阵的运算_计算压缩存储对称矩阵 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://xiahunao.cn/news/3223634.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

ARM裸机:一步步点亮LED(汇编)

硬件工作原理及原理图查阅 LED物理特性介绍 LED本身有2个接线点&#xff0c;一个是LED的正极&#xff0c;一个是LED的负极。LED这个硬件的功能就是点亮或者不亮&#xff0c;物理上想要点亮一颗LED只需要给他的正负极上加正电压即可&#xff0c;要熄灭一颗LED只需要去掉电压即可…

2024 Q3 NAND闪存价格|企业级依然猛涨,消费级放缓

在企业领域持续投资于服务器基础设施&#xff0c;特别是在人工智能应用的推动下&#xff0c;企业级SSD需求增加的同时&#xff0c;消费电子市场却依旧疲软。加之NAND供应商在2024年下半年积极扩大生产&#xff0c;预计到2024年第三季度&#xff0c;NAND闪存供应充足率将上升至2…

jQuery 笔记

一、什么是jQuery 框架&#xff1a;半成品软件 Jquery就是封装好的js 本质上还是js jQuery是一个快速、简洁的JavaScript**框架**&#xff0c;是继Prototype之后又一个优秀的**JavaScript代码库**&#xff08;*或JavaScript框架*&#xff09;。 JQuery:封装好的代码库。有一…

程序设计——领域驱动设计

程序设计的所有原则和方法论都是追求一件事——简单——功能简单、依赖简单、修改简单、理解简单。因为只有简单才好用&#xff0c;简单才好维护。因此&#xff0c;不应该以评论艺术品的眼光来评价程序设计是否优秀&#xff0c;程序设计的艺术不在于有多复杂多深沉&#xff0c;…

JVM原理(二三):JVM虚拟机线程安全的实现方法

1. 互斥同步 互斥同步(MutualExclusion&Synchronization)是一种最常见也是最主要的并发正确性保障手段。同步是指在多个线程并发访问共享数据时&#xff0c;保证共享数据在同一个时刻只被一条(或者是一些&#xff0c;当使用信号量的时候)线程使用。而互斥是实现同步的一种…

3d模型墙模糊怎么回事?---模大狮模型网

在展览3D模型设计行业中&#xff0c;技术细节常常是设计师们需要面对和解决的关键问题之一。其中&#xff0c;3D模型墙模糊的现象可能会影响整个展览的视觉效果和观众的体验。本文将深入探讨这一问题的起因及解决方法&#xff0c;帮助设计师们更好地处理类似挑战。 一、问题的起…

MySQL架构优化及SQL优化

变更项目的整体架构是性能收益最大的方式。主要涉及两方面&#xff0c;一方面是从整个项目角度&#xff0c;引入一些中间件优化整体性能&#xff0c;另一方面是调整MySQL的部署架构&#xff0c;确保能承载更大的流量访问&#xff0c;提高数据层的整体吞吐。 1. 引入缓存中间件…

不用服务器 | 我搭建了一个属于自己的GPT聊天应用!!!

原文地址&#xff1a;aiutools.fun/archives/5118 平台限制部分内容未显示&#xff0c;详情请访问原文。 展示 不废话&#xff0c;直接上干货&#xff01; 我这里搭建的Lobe Chat 支持 聊天TTS & STT 语音会话文生图各种优秀的插件 下面搭建好的样子 前期准备 需要…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(四)支持json和xml的显示

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、相应的界面前端代码 <template><div class"formDesign"><FlowDesign :process"process" :fields"fields" :readOnly"readOnly&quo…

算法之工程化内容(2)—— Git常用命令

目录 1. git初始化配置 2. 新建仓库 3. 工作区——>暂存区——>本地仓库 4. git reset回退版本 5. 查看差异 git diff 6. 删除文件git rm 7. .gitignore 8. vscode操作git 9. git分支、合并和删除 10. 解决合并冲突 11. 回退和rebase 12. 添加远程仓库 参考链接&#xff…

【少儿编程Python:趣味编程,探索未来】第四章 面向对象编程,开启编程新境界 / 第二节 继承与多态的魔法探险

欢迎进入Python编程的奇幻世界!在这个课程中,我们将一起探索编程的乐趣,通过生动有趣的方式,培养孩子们的逻辑思维和创造力,让他们成为未来的科技小达人。 以下是我们课程的大纲: 【少儿编程Python:趣味编程,探索未来】 目录 1. 命名空间和作用域的探险之旅1.1 命名空间…

【通信协议】八、CDL(Caterpillar Data Link)协议解析

1、协议简介 CDL(Caterpillar Data Link)是caterpillar的通信协议,该品牌发动机ECM与各控制单元进行通信时,采用基于RS-485的物理层规范进行开发的CDL协议进行通信; 2、物理层 信号传输方式:差分信号(通过两条线的电压差识别逻辑0或逻辑1) 通信方式:半双工通信(只允…

Agent如何帮助大模型“增强记忆”?

Agent如何帮助大模型“增强记忆”&#xff1f; 原创 格林 神州问学 2024年07月08日 17:50 日本 记忆反馈 >规划&#xff1f; 来源|神州问学 引言 去年6月份&#xff0c;Lilian发布了关于LLM驱动的Agent的结构和组件&#xff0c;其中包括规划、行动、工具还有记忆&#xff…

电脑清理c盘内存空间怎么清理免费 怎么清理c盘的垃圾文件又不删除有用文件

在计算机使用过程中&#xff0c;随着时间的推移&#xff0c;C盘空间可能会被各种临时文件、缓存和无用的注册表项占用。这不仅会导致C盘空间不足&#xff0c;还可能影响计算机的性能。那么怎么样清理C盘内存空间&#xff0c;怎么样清理C盘的垃圾避开系统文件呢&#xff1f; 一…

用LangGraph、 Ollama,构建个人的 AI Agent

如果你还记得今年的 Google I/O大会&#xff0c;你肯定注意到了他们今年发布的 Astra&#xff0c;一个人工智能体&#xff08;AI Agent&#xff09;。事实上&#xff0c;目前最新的 GPT-4o 也是个 AI Agent。 现在各大科技公司正在投入巨额资金来创建人工智能体&#xff08;AI …

数据结构 实验 3

题目一&#xff1a;最短路径dijkstra算法 一、实验目的 熟练图的邻接矩阵和邻接表表示法掌握图的最短路径Dijkstra算法的基本思想用C语言实现Dijkstra算法 二、实验内容 从键盘输入的数据创建图&#xff08;图的存储结构采用邻接矩阵&#xff09;&#xff0c;设计Dijkstra算…

SCI二区TOP|蜘蛛黄蜂优化算法(SWO)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年&#xff0c;M Abdel-Basset受到蜘蛛黄蜂优化社会行为启发&#xff0c;提出了蜘蛛黄蜂优化算法&#xff08;Spider Wasp Optimizer, SWO&#xff09;。 2.算法原理 2.1算法思想 S…

git撤销/返回到某次提交(idea工具 + gitbush)

不多说废话&#xff0c;直接展示使用。 方法一&#xff1a;使用idea工具进行返回 准备某次过度提交 使用idea打开git log 找到要回去的版本 点击右键选到reset 模式选hard&#xff0c;强制回滚 这个时候本地代码已经回归你指定的版本了。 这个时候再进行强制推送&#xff0c…

Flutter Inno Setup 打包 Windows 程序

转载自&#xff1a;flutter桌面应用从开发配置到打包分发 - 掘金 (juejin.cn) 五.打包 1.创建 release 版本的应用 flutter build release 执行完成后&#xff0c; release包位置在项目的build->windows->runer文件夹中 2.应用程序分发 Windows 为 Windows 平台构建…

Linux 利用命名空间创建一个自己的“容器“

Linux 利用命名空间创建一个自己的"容器" 前置条件 创建一个目录存放容器mkdir /myapp准备静态编译busybox&#xff0c;操作系统自带的往往是依赖动态库的(本文使用的debian apt install busybox-static) 开始 使用unshare起一个独立命名空间.# 进入后/myapp目录…