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

解析博客:

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

函数功能:

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

函数实现:

#define max_wide 4
/**************************************************
函数名: Init_triangular_matrix
功  能: 初始化下三角矩阵,为其分配存储空间
参  数: int *&matrix:给对应矩阵分配空间
返回值: 无
**************************************************/
void Init_triangular_matrix(int *&matrix)
{
    //给地址分配空间
    matrix = (int*)malloc(sizeof(int)*(max_wide*(max_wide+1)/2));
}
/**************************************************
函数名: get_Value_triangular_matrix
功  能: 得到下三角矩阵的值(因为是压缩存储,所以需要转换)
参  数: (1)int matrix[]:下三角矩阵矩阵存储数据的一维数组
        (2)int x:对应的横坐标
        (3)int y:纵坐标
返回值: int:对应坐标的值
**************************************************/
int get_Value_triangular_matrix(int matrix[],int x,int y)
{
    if(x >= y)
    {
        return matrix[x*(x+1)/2+y];
    }
    else    //上三角,则直接返回末尾
    {
        return matrix[max_wide*(max_wide+1)/2];
    }
}
/**************************************************
函数名: Assign_triangular_matrix
功  能: 给压缩下三角矩阵赋值(和取值一样,也是通过一维数组转换)
参  数: (1)int matrix[]:要赋值的下三角压缩矩阵
        (2)int input_value:要赋的值
        (3)int x:对应的横坐标
        (4)int y:对应的纵坐标
注 意: 上三角, 相当于整体赋值一个数,下三角则正常赋值
返回值: 无
**************************************************/
void Assign_triangular_matrix(int matrix[],int input_value,int x,int y)
{
    if(x >= y)
    {
        matrix[x*(x+1)/2+y] = input_value;
    }
    else      //上三角整体赋值
    {
        matrix[max_wide*(max_wide+1)/2] = input_value;
    }
    return;
}
/**************************************************
函数名: Display_triangular_matrix
功  能: 输出展示下三角矩阵(调用取值函数)
参  数: int matrix[]:要展示的下三角矩阵
返回值: 无
**************************************************/
void Display_triangular_matrix(int matrix[])
{
    int i,j;
    for(i = 0; i<max_wide; i++)
    {
        for(j = 0; j<max_wide; j++)
        {
            printf("%5d",get_Value_triangular_matrix(matrix,i,j));
        }
        printf("\n\n");
    }
}
/**************************************************
函数名: Destroy_triangular_matrix
功  能: 销毁下三角矩阵的空间
参  数: int matrix[]:要销毁的压缩下三角矩阵
返回值: 无
**************************************************/
void Destroy_triangular_matrix(int matrix[])
{
    free(matrix);
}

main函数调用

int main()
{
    int *matrix_test1;
    int line,row;//行,列
    int input_value;
    Init_triangular_matrix(matrix_test1);
    printf("\n请输入对称矩阵上三角常量:\n");
    scanf("%d",&input_value);
    matrix_test1[max_wide*(max_wide+1)/2] = input_value;
    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_triangular_matrix(matrix_test1,input_value,line,row);
        }
    }
    Display_triangular_matrix(matrix_test1);
    Destroy_triangular_matrix(matrix_test1);
    return 0;
}

下三角矩阵完整代码:

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

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

/**************************************************
函数名: Init_triangular_matrix
功  能: 初始化下三角矩阵,为其分配存储空间
参  数: int *&matrix:给对应矩阵分配空间
返回值: 无
**************************************************/
void Init_triangular_matrix(int *&matrix)
{
    //给地址分配空间
    matrix = (int*)malloc(sizeof(int)*(max_wide*(max_wide+1)/2));
}
/**************************************************
函数名: get_Value_triangular_matrix
功  能: 得到下三角矩阵的值(因为是压缩存储,所以需要转换)
参  数: (1)int matrix[]:下三角矩阵矩阵存储数据的一维数组
        (2)int x:对应的横坐标
        (3)int y:纵坐标
返回值: int:对应坐标的值
**************************************************/
int get_Value_triangular_matrix(int matrix[],int x,int y)
{
    if(x >= y)
    {
        return matrix[x*(x+1)/2+y];
    }
    else    //上三角,则直接返回末尾
    {
        return matrix[max_wide*(max_wide+1)/2];
    }
}
/**************************************************
函数名: Assign_triangular_matrix
功  能: 给压缩下三角矩阵赋值(和取值一样,也是通过一维数组转换)
参  数: (1)int matrix[]:要赋值的下三角压缩矩阵
        (2)int input_value:要赋的值
        (3)int x:对应的横坐标
        (4)int y:对应的纵坐标
注 意: 上三角, 相当于整体赋值一个数,下三角则正常赋值
返回值: 无
**************************************************/
void Assign_triangular_matrix(int matrix[],int input_value,int x,int y)
{
    if(x >= y)
    {
        matrix[x*(x+1)/2+y] = input_value;
    }
    else      //上三角整体赋值
    {
        matrix[max_wide*(max_wide+1)/2] = input_value;
    }
    return;
}
/**************************************************
函数名: Display_triangular_matrix
功  能: 输出展示下三角矩阵(调用取值函数)
参  数: int matrix[]:要展示的下三角矩阵
返回值: 无
**************************************************/
void Display_triangular_matrix(int matrix[])
{
    int i,j;
    for(i = 0; i<max_wide; i++)
    {
        for(j = 0; j<max_wide; j++)
        {
            printf("%5d",get_Value_triangular_matrix(matrix,i,j));
        }
        printf("\n\n");
    }
}
/**************************************************
函数名: Destroy_triangular_matrix
功  能: 销毁下三角矩阵的空间
参  数: int matrix[]:要销毁的压缩下三角矩阵
返回值: 无
**************************************************/
void Destroy_triangular_matrix(int matrix[])
{
    free(matrix);
}


int main()
{
    int *matrix_test1;
    int line,row;//行,列
    int input_value;
    Init_triangular_matrix(matrix_test1);
    printf("\n请输入对称矩阵上三角常量:\n");
    scanf("%d",&input_value);
    matrix_test1[max_wide*(max_wide+1)/2] = input_value;
    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_triangular_matrix(matrix_test1,input_value,line,row);
        }
    }
    Display_triangular_matrix(matrix_test1);
    Destroy_triangular_matrix(matrix_test1);
    return 0;
}

运行结果:

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

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

相关文章

Canvas:实现在线画板操作

想象一下&#xff0c;用几行代码就能创造出如此逼真的图像和动画&#xff0c;仿佛将艺术与科技完美融合&#xff0c;前端开发的Canvas技术正是这个数字化时代中最具魔力的一环&#xff0c;它不仅仅是网页的一部分&#xff0c;更是一个无限创意的画布&#xff0c;一个让你的想象…

谷粒商城学习笔记-22-分布式组件-SpringCloud-OpenFeign测试远程调用

文章目录 一&#xff0c;OpenFeign的简介二&#xff0c;OpenFeign的使用步骤1&#xff0c;场景说明2&#xff0c;引入依赖2&#xff0c;开启OpenFeign3&#xff0c;编写Feign接口4&#xff0c;使用feign调用远程接口5&#xff0c;验证 错误记录 上一节学习了注册中心&#xff0…

Linux-shell编程入门基础

文章目录 前言Shell编程bash特性shell作用域变量环境变量$特殊变量$特殊状态变量 $特殊符号(很重要)其他内置shell命令shell语法的子串截取统计 指令执行时间练习shell特殊扩展变量父子shell的理解内置和外置命令区别 数值计算双括号(())运算letexprexpr模式匹配 bcawk中括号 s…

ts语法---泛型和泛型约束

泛型 泛型&#xff0c;动态类型&#xff0c;是一个初始化不明确的类型&#xff0c;类似于函数中的形参&#xff08;不明确参数值&#xff09;&#xff0c; 泛型一般用在function定义函数时动态约束类型&#xff0c;和type定义类型时动态约束类型&#xff0c; 泛型一般使用任…

Jenkins教程-18-常用插件-description-setter

上一小节我们学习了Jenkin常用插件Environment Injector的使用方法&#xff0c;本小节我们讲解一下Jenkin常用插件description-setter的使用方法。 在某些情况下&#xff0c;用户可能希望根据构建过程中的某些关键信息来自定义构建的描述&#xff0c;比如部署的用户信息、提交…

​李白一生的过往轨迹矢量地图

今天我们来看一下“天子呼来不上船&#xff0c;自称臣是酒中仙”大诗人李白过往轨迹&#xff0c;看看他一生都去过哪些地方&#xff1f; 我们将李白一生去过的地方搜集整理了一份矢量地图&#xff0c;有需要请在文末查看该数据的领取方法。 李白一生的过往轨迹 李白&#xf…

stm32按键设置闹钟数进退位不正常?如何解决

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

JavaScript-日期对象

日期对象 作用&#xff1a;用来表示时间的对象 获取当前时间 const datenew Date();console.log(date);可以得到日期对象&#xff0c;里面的属性有星期&#xff0c;年月日&#xff0c;时分秒 获取指定时间 const datenew Date(2023-05-01);console.log(date); 获取时间戳 时间…

Deepspeed : AttributeError: ‘DummyOptim‘ object has no attribute ‘step‘

题意&#xff1a;尝试在一个名为 DummyOptim 的对象上调用 .step() 方法&#xff0c;但是这个对象并没有定义这个方法 问题背景&#xff1a; I want to use deepspeed for training LLMs along with Huggingface Trainer. But when I use deepspeed along with trainer I get …

实习记录3

1.Mybaits懒加载 MyBatis 延迟加载&#xff08;懒加载&#xff09;一篇入门-腾讯云开发者社区-腾讯云 (tencent.com) 2.高级映射 106-高级映射之多对一映射第一种方式_哔哩哔哩_bilibili 3.TableId(type IdType.INPUT) Mybatis-plus 主键生成策略_mybatis-plus 自增主键等于…

和鲸科技荣耀入选2024 H1 「中国最具价值 AGI 创新机构 TOP 50」

以下文章来源于Founder Park&#xff0c;作者Founder Par 大模型的盛宴&#xff0c;不应该只属于那些无数光环加身的算法天才们。 模型的冰山一角下&#xff0c;是应用层的暗流涌动&#xff0c;这是一个更庞大&#xff0c;也更隐秘的蓝海。但发掘这一切的前提是&#xff0c;所…

redis哨兵模式搭建

先搭建主从结构 当需要运行多个Redis实例时&#xff0c;可以通过为每个实例使用不同的配置文件的方式来实现。 复制redis目录下的redis.conf文件将其重命名为redis6380.conf和redis6381.conf&#xff0c;或者将其放到单独文件夹中&#xff0c;这里为了偷懒&#xff0c;简单实现…

使用 MinIO 赢得 RAG 权利

人们常说&#xff0c;在人工智能时代&#xff0c;数据是你的护城河。为此&#xff0c;构建生产级 RAG 应用程序需要合适的数据基础架构来存储、版本控制、处理、评估和查询构成专有语料库的数据块。由于 MinIO 采用数据优先的 AI 方法&#xff0c;因此对于此类项目&#xff0c;…

TotalSegmentator---针对CT/MRI数据的自动分割

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 公众号&#xff1a;VTK忠粉 前言 本文分享开源软件TotalSegmentator&#xff0c;该开源项目针对CT/MRI数据类型&#xff0c;对主要的解剖学结构进行自动分割&#xff0c;并且被集成到MITK中。希望对各…

Global Mapper:地理信息的温柔探索

引言 在这纷繁复杂的世界里&#xff0c;地理信息系统&#xff08;GIS&#xff09;如同一把利器&#xff0c;帮助我们剖析、理解和改造这个世界。而在众多GIS软件中&#xff0c;Global Mapper无疑是其中的佼佼者。作为一款功能全面且易于使用的GIS应用程序&#xff0c;Global M…

springboot养老院管理系统-计算机毕业设计源码00010

摘要 本文介绍了一种基于Spring Boot框架的养老院管理系统的设计与实现。该系统旨在帮助养老院管理者更有效地管理机构内的各项事务&#xff0c;并提供更好的服务于老年人。系统的设计考虑了养老院管理的特殊需求&#xff0c;包括系统用户、老人信息管理、服务分类管理、医疗服…

谷歌个人开发者账号14天封测审核通过技巧,你还不知道吗?

众所周知&#xff0c;目前在Google play应用商店上架应用已经不是那么容易了&#xff0c;谷歌各种政策的更新以及审核系统的升级&#xff0c;给开发者们带来了不少挑战。 尤其针对个人开发者账号需要20人连续14天的封测的要求&#xff0c;周期长&#xff0c;且随着政策执行力度…

[Vulnhub] IMF File Upload BypassBuffer Overflow

信息收集 IP AddressOpening Ports192.168.8.103TCP:80 $ nmap -p- 192.168.8.103 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-title: IMF - Homepage |_http-server-header: Apache/2.4.18 (Ubunt…

揭秘!chatGPT核心技术应用

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年11月7日&#xff0c;OpenAI首届开发者大会被称为“科技界的春晚”&#xff0c;吸引了全球广大…

个人面试总结

写在前面&#xff1a;以下是自己在拟录用后回顾总结的了一下当时面试题目&#xff0c;把标答写了出来&#xff0c;供以后复习所使用&#xff0c;希望大家理性食用~~ 预祝大家都能找到心仪的工作 笔试题目&#xff1a; 1.1. java中Collection和Collections的区别 Collection…