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

news2024/9/19 10:42:58

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

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

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

相关文章

VMware Workstation 和 Fusion 现对个人用户宣布免费使用

这周笔记本坏了&#xff0c;重装了系统&#xff0c;部分软件也得重装&#xff0c;其中就有 VMware Workstation&#xff0c; 当我还在上网苦苦找破解包时&#xff08;个人学习使用&#xff09;&#xff0c;发现现在居然免费了…… 原来 VMware 换了新东家&#xff0c;简单回顾下…

DMA方式的知识点笔记

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 目录 1. DMA基本概念 2. DMA传送过程 易错点 DMA控制器操作流程 3. DMA传送方式 这是单总线的结果 &#xff08;CPU说了算 所以不会产生于CPU的冲突&#xff09; 这…

谷歌摸鱼神器来了:推出AI会议替身,一键总结提问发言_会议预约 ai对话

饱受会议折磨的打工人&#xff0c;终于可以解放了&#xff01; 就在刚刚举办的Google Cloud Next’23大会上&#xff0c;谷歌宣布了一系列科技新进展&#xff0c;最瞩目的要属其中的“开会AI替身”了。 只需要一句“帮我参加”&#xff0c;AI就能替你开会&#xff0c;并在合适…

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…

python04——类(基础new)

类其实也是一种封装的思想&#xff0c;类就是把变量、方法等封装在一起&#xff0c;然后可以通过不同的实例化对其进行调用操作。 1.类的定义 class 类名&#xff1a; 变量a def __init__ (self,参数2&#xff0c;参数2...)&#xff1a;初始化函数&#xff01;&#xff01;&…

【LeetCode】生命游戏

目录 一、题目二、解法完整代码 一、题目 根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一…

Qt 音频编程实战项目

一Qt 音频基础知识 QT multimediaQMediaPlayer 类&#xff1a;媒体播放器&#xff0c;主要用于播放歌曲、网络收音 机等功能。QMediaPlaylist 类&#xff1a;专用于播放媒体内容的列表。 二 音频项目实战程序 //版本5.12.8 .proQT core gui QT multimedia greate…

C++入门基础(2)

目录 一、引用: 1、定义&#xff1a; 2、特性&#xff1a; 3、引用的使用&#xff1a; 4、const引用&#xff1a;控制权限 const引用定义: const引用可以接收3种对象&#xff1a; 1、正常对象&#xff1a; 2、临时对象&#xff1a; 3、const对象&#xff1a; 总结&…

Sorted Set 类型命令(命令语法、操作演示、命令返回值、时间复杂度、注意事项)

Sorted Set 类型 文章目录 Sorted Set 类型zadd 命令zrange 命令zcard 命令zcount 命令zrevrange 命令zrangebyscore 命令zpopmax 命令bzpopmax 命令zpopmin 命令bzpopmin 命令zrank 命令zscore 命令zrem 命令zremrangebyrank 命令zremrangebyscore 命令zincrby 命令zinterstor…

vue子组件调用父组件方法

父组件 页面<popoverss ref"pop" :goodspop"goodspop"></popoverss>子组件components: {"popoverss": () > import(../comm/popover.vue)},方法goodspop(e){console.log(e"----")return 9999;},子组件 方法props:[go…

【转载】目标检测mAP的含义

转载自三叔家的猫 https://blog.csdn.net/qq_39056987 https://blog.csdn.net/qq_39056987/article/details/104348493 <div id"content_views" class"markdown_views prism-atom-one-light"><svg xmlns"http://www.w3.org/2000/svg" s…

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

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

(2)滑动窗口算法练习:无重复字符的最长子串

无重复字符的最长子串 题目链接&#xff1a;3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长子串的长度。 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是"a…

Java字符串(String、字符串拼接、原理)

文章目录 一、String字符串1.1创建方式【直接赋值、new一个对象】1.1.1 使用字符串字面值直接赋值&#xff1a;&#xff08;1&#xff09;字符串字面量创建String对象的转换过程&#xff08;2&#xff09;一些方法&#xff08;3&#xff09;说明 1.1.2 使用new关键字创建字符串…

Java如何自定义注解及在SpringBoot中的应用

注解 注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xff0c;用来对这些元素进行说…

最快视频转绘-AnimateDiff-Lightning

最快视频转绘-AnimateDiff-Lightning Video-to-Video Generation AnimateDiff-Lightning 非常适合视频到视频的生成。使用 ControlNet 提供最简单的 comfyui 工作流程。 「ComfyUI-aki-v1.3.7z」链接&#xff1a;https://pan.quark.cn/s/199a753292d8 下载导入工作流 animat…

182440-00SF 同轴连接器

型号简介 182440-00SF是Southwest Microwave的一款连接器。该连接器采用 BeCu UNqS C17300 材料&#xff0c;并进行了镀金处理&#xff0c;以确保良好的导电性和耐腐蚀性&#xff1b;螺纹采用符合 ASTM A2582 标准的钢制合金&#xff0c;并进行磷酸盐钝化处理&#xff0c;以提高…

FunAudioLLM SenseVoice语音转录与CosyVoice语音合成及语音克隆使用案例

参考: https://fun-audio-llm.github.io/ 1、SenseVoice语音转录 在线体验:https://modelscope.cn/studios/iic/CosyVoice-300M 参考:https://github.com/FunAudioLLM/SenseVoice 下载: pip install -U funasr使用: from funasr import AutoModelmodel_dir = "…

如何从 Vue 2 无痛升级到 Vue 3,一文搞定!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 随着 Vue 3 的发布,许多开发者都面临着从 Vue 2 升级到 Vue 3 的挑战。 本文将详细介绍如何从 Vue 2 无痛升级到 Vue 3,包括每个步骤的详细说明与代码示例。 让我们开始吧! 准备工作 在正式开始升级之前,请确保你已经…

Linux网络命令:网络工具socat详解

目录 一、概述 二、基本用法 1、基本语法 2、常用选项 3、获取帮助 三、用法示例 1. 监听 TCP 端口并回显接收到的数据 2. 通过 TCP 端口转发数据到 UNIX 套接字 3. 将文件内容发送到 TCP 端口&#xff1a; 4. 使用伪终端进行串行通信 5、启动一个TCP服务器 6、建…