//稀疏矩阵
/*
|0 12 9 0 0 0 0| |0 0 -3 0 0 15|
|0 0 0 0 0 0 0| |12 0 0 0 18 0|
M=|-3 0 0 0 0 14 0| T=|9 0 0 24 0 0|
|0 0 24 0 0 0 0| |0 0 0 0 0 -7|
|0 18 0 0 0 0 0| |0 0 0 0 0 0|
|15 0 0 -7 0 0 0| |0 0 14 0 0 0|
|0 0 0 0 0 0|
M的转置矩阵为T
*/
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 12500 //假设非零元个数的最大值为12500
#define OK 1
#define OVERFLOW -2
typedef struct
{
int i,j; //非零元行的行下标和列下标
int e; //非零元的值
}Triple;
typedef struct
{
Triple data[MAXSIZE+1]; //非零元三元组表,data[0]未用
int mu,nu,tu; //矩阵的行数,列数和非零个数
}TSMatrix;
typedef int Status;
Status TransposeSMatrix(TSMatrix M,TSMatrix *T)
{
int q,p,col;
T->mu=M.mu;
T->nu=M.nu;
T->tu=M.tu;
if(T->tu)
{
q=1;
for(col=1;col<=M.mu;++col)
{
for (p=1;p<=M.nu;p++)
{
if (M.data[p].j==col)
{
T->data[q].i=M.data[p].j;
T->data[q].j=M.data[p].i;
T->data[q++].e=M.data[p].e;
}
}
}
}
return OK;
}
Status FastTransposeSMatrix(TSMatrix M,TSMatrix *T)
{
T->mu=M.mu;
T->nu=M.nu;
T->tu=M.tu;
int col,*num,t,*cpot,p,q;
if(!(num=(int *)malloc((M.nu+1)*sizeof(int))))
{
exit(OVERFLOW);
}
if (!(cpot=(int *)malloc((M.nu+1)*sizeof(int))))
{
exit(OVERFLOW);
}
if (T->tu)
{
for (col = 0; col <= M.nu; col++)
{
num[col]=0;
}
for (t = 1; t <= M.tu; t++)
{
++num[M.data[t].j];
}
cpot[1]=1;
for ( col = 2; col <= M.mu; col++)
{
cpot[col]=cpot[col-1]+num[col-1];
}
for (p = 1; p <= M.tu ; ++p)
{
col=M.data[p].j;
q=cpot[col];
T->data[q].i=M.data[p].j;
T->data[q].j=M.data[p].i;
T->data[q].e=M.data[p].e;
++cpot[col];
}
}
}
void main()
{
TSMatrix M,T;
int i=1;
M.data[1].i=1;
M.data[1].j=2;
M.data[1].e=12;
M.data[2].i=1;
M.data[2].j=3;
M.data[2].e=9;
M.data[3].i=3;
M.data[3].j=1;
M.data[3].e=-3;
M.data[4].i=3;
M.data[4].j=6;
M.data[4].e=14;
M.mu=6;
M.nu=7;
M.tu=4;
FastTransposeSMatrix(M,&T);
for(i= 1; i<=T.tu;i++)
{
printf("%d %d %d\n",T.data[i].i,T.data[i].j,T.data[i].e);
}
getchar();
}相关推荐
数据结构C语言版系数矩阵的转置
数据结构C语言版系数矩阵的转置,包括结构的定义和转置的实现。
数据结构-数组(稀疏矩阵转置)和广义表
数组是一种用于存储多个相同类型数据的集合,其元素在内存中连续存放并按照一定的顺序排列。这种有序性和连续性使得数组在访问时具有较高的效率。数组的特点包括所有元素具有相同的数据类型、可以通过索引快速访问任意元素、支持各种操作如遍历和排序等,并且数组的定义和初始化方式在不同编程语言中有所不同。int i,j;//该非零元的行下标和列下标ElemType e;}Triple;//非零元三元组表,data[0]未用//矩阵的行数、列数和非零元总数TSMatrix;int i,j;//该非零元的行和列下标。
数据结构实验 数组和广义表
数组和广义表 一、实验名称:数组和广义表 二、实验目的: (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点; (2)掌握线数组和广义表储存结构的定义及C语言实现; (3)掌握数组和广义表的各种基本操作; (4)学会利用数组和广义表的基本知识解决实际问题。 三、实验内容: 若矩阵中的某个元素是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。
数据结构:广义表转置
问题描述 设计算法,将指定的广义表的内容原地逆置。例如:若广义表GL为[1, [2, 3], 4, [5, [6, 7], 8], 9],逆置后GL为 [9, [8, [7, 6], 5], 4, [3, 2], 1] 。 基本思路 如题,一眼就能看出问题具有递归性,因此采用递归来求解,代码就非常简单了。 Python实现 #encoding = utf8 def revers...
实战避坑:在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时,必须搞清的P2P DMA与IOMMU那些事
本文深入探讨在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时P2P DMA与IOMMU的关键问题,解析PCIe架构中的地址转换、P2P DMA与标准DMA的区别,以及IOMMU对性能的影响。通过实战案例和调优建议,帮助用户避免常见配置陷阱,提升AI训练集群的数据传输效率。
Arduino--土壤湿度传感器使用(电阻式)
最近买了一个土壤湿度检测传感器,实物图是这样的: 我买这个模块是想要得到土壤湿度的模拟量。但我买的时候忘了买左边的蓝色模块,我开始以为这个模块是有运放功能的,但实际它是一个电压比较器和一个分压电路。 其模块的接线如图: 该模块的四线是带模拟量输出的,三线的只输出一个到达阈值的标志量。该模块的原理图如下: 该模块的测试原理为:把土壤当成一个可变电阻,随着土壤含水量的增加,土壤电阻减小。而该传感器其实就是两个电极,用来接土壤这个可变电阻。一般湿度的土壤电阻大概在几百K左右,其串连的分压电阻应该在这个数量级。
数据结构(四)——数组与广义表之三元矩阵的快速转置
数组 数组的类型定义 数组的组成:下标、值 数组的特点:元素属于同一种数据类型、具有固定格式和数量的数据集合 数组的顺序表示和实现 数组的存储结构:数组是多维结构,而存储空间是一个一维的结构 二维数组的存储域寻址——不同的存储方式有不同元素地址计算方法:大部分按行优先 矩阵的压缩存储 特俗矩阵的压缩存储:稀疏矩阵(矩阵中有许多特定的值)、特殊矩阵(矩阵中很多值相同的元素并且它们的分布有一...
神经算子:突破科学计算瓶颈的函数空间映射技术
神经算子(Neural Operators)是深度学习在科学计算领域的重要突破,它从根本上改变了处理连续物理问题的方式。与传统神经网络学习离散数据点映射不同,神经算子学习的是函数空间到函数空间的映射,这种范式转换使其具备离散化收敛性和超分辨率预测能力。在计算流体力学、天气预报等需要求解偏微分方程的场景中,神经算子能够在保持精度的同时将计算速度提升数个数量级。傅里叶神经算子(FNO)通过快速傅里叶变换实现高效计算,特别适合规则网格问题;而图神经算子(GNO)则擅长处理不规则网格和复杂几何形状。这种技术为参数敏
数据结构——数组和广义表(三元顺序表之一般转置和快速转置)
辛辛苦苦写的代码,点个赞再走呗 里面还有注释呢 #include"iostream" #include"algorithm" using namespace std; #define MAXSIZE 10 typedef struct Triple{ int i; int j; int Element; Triple(int d=0,int e = 0,int f = 0){ i...
模拟IC实战—30天精通Sigma-delta(Σ-Δ) ADC 行为级建模与仿真
本文为模拟IC工程师提供了一套为期30天的Sigma-delta ADC行为级建模与仿真实战指南。文章深入浅出地阐释了Sigma-delta ADC如何通过过采样和噪声整形两大核心技术实现高精度转换,并重点演示了如何使用Python从零搭建一阶和二阶调制器模型,进行性能仿真与关键指标分析,为后续电路级设计提供清晰的性能预算和架构指导。
不用U盘也能装Ubuntu?手把手教你用EasyUEFI搞定双系统(附企业版资源)
本文详细介绍了无需U盘即可安装Ubuntu双系统的方法。通过使用EasyUEFI工具,在Windows环境下创建虚拟启动分区并配置UEFI引导,即可直接从硬盘启动Ubuntu安装程序。该方法特别适合开发者或技术爱好者快速搭建Linux开发环境,操作安全便捷,无需额外物理介质。
c语言版数据结构(奇迹冬瓜)-数组和广义表(稀疏矩阵的乘法)
//-------矩阵的乘法--------- /* 假设题目: 3 0 0 5 0 2 0 6 M= 0 -1 0 0 N= 1 0 Q=-1 0 Q=M*N 2 0 0 0 -2 4 0 4 0 0 (表1) 非零元三元表: M: N:
Flutter 完整学习文档 - 从入门到精通
Widget 就像乐高积木,Flutter 中所有的东西都是 Widget。一个按钮是 Widget,一段文字是 Widget,甚至布局、边距、对齐方式也是 Widget!"万物皆 Widget"
c语言版数据结构(奇迹冬瓜)-数组和广义表(十字链表稀疏矩阵的加法)
/* 以下是用于测试的两个稀疏矩阵 3 0 0 5 M= 0 -1 0 0 (M矩阵) 2 0 0 0 -3 0 2 0 N= 0 5 0 0 (N矩阵) 0 0 0 -1 M=M+N
YOLO11改进-注意力-引入多尺度注意力聚合(MSAA)模块
对来自backbone的特征进行细化处理。通过空间和通道两个路径的操作,增强了空间和通道方面的特征信息,使得输出的特征图在空间和通道维度上都更加优质。1. 在空间细化路径中,通过对不同核大小的卷积进行求和以及一系列的空间特征聚合操作,实现了多尺度空间信息的融合。2. 在通道聚合路径中,通过全局平均池化、卷积和激活等操作生成通道注意力图,并与空间细化后的图相结合,实现了通道维度上的多尺度信息融合。
倍福PLC--PERSISTENT断电保持数据和BOOT中各文件对应的解析
将D:\TC3程序\TwinCAT Project146\TwinCAT RT(x86)\Plc 文件夹的中三个替换文件复制到:G:\TwinCAT\3.1\Boot\Plc完成替换,如下图。(2) 找到程序所存的路径,编程电脑的D:\TC3程序\TwinCAT Project146路径下,并选择对应系统平台TwinCAT RT(x86)(3) 控制器断电,拔出内存卡,使用读卡器,在编程电脑中打开:(本次测试读卡器为G盘)(5) 开机完成后,TwinCAT自动运行,当前闪灯频率为50ms。
c语言版数据结构(奇迹冬瓜)-数组和广义表(十字链表存贮稀疏矩阵的行列值)
/* 3 0 0 5 M= 0 -1 0 0 (M矩阵) 2 0 0 0 M.chead(colhead) 1 2 3 4 M.rhead(rowhead) 1 1 1 3
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
数据结构--数组和广义表--以三元组顺序表存储方式的矩阵的一般转置和快速转置
//三元组顺序表来存储矩阵并进行矩阵的转置 typedef int Elemtype ; const int MAXSIZE=12500; const int MAXNUM=20; typedef struct{ int i,j; //该非零元的行下标和列下标 Elemtype e; //非零的值 } Triple; typedef struct{ Triple d
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
广义表的应用--稀疏矩阵的快速转置(三元组)
#include #define MAXSIZE 10000 typedef struct{ int i,j; int e; }Triple; typedef struct{ Triple data[MAXSIZE+1]; int mu,nu,tu; }TSMatrix; int row,col; TSMatrix *CreateSMatrix(TSMatrix
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
数据结构实验之数组二:稀疏矩阵
sdut原题链接数据结构实验之数组二:稀疏矩阵 Time Limit: 5MS Memory Limit: 1000KBProblem Description 对于一个n*n的稀疏矩阵M(1 <= n <= 1000),采用三元组顺序表存储表示,查找从键盘输入的某个非零数据是否在稀疏矩阵中,如果存在则输出OK,不存在则输出ERROR。稀疏矩阵示例图如下: Input 连续输入多组数据,每组数
第五章 数组和广义表(4)三元组矩阵转换(转)
#include <stdio.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 typedef int Status; typedef float ElemType; typedef struct{//三元组结构 ...
C语言数据结构——稀疏矩阵的快速转置
#include<stdio.h> #include<stdlib.h> #include<stdarg.h>#define OK 1 #define MAXSIZE 12500typedef int Status;typedef struct { int i; int j; int e; }Triple;typedef struct { int mu; in
C语言旅途之用数组实现转置矩阵
Ⅰ、用数组实现转置矩阵: ①、//代码摘下直接可以运行 //转置矩阵 #include “stdio.h” int main( ) { int i,j,a[4][4],n=1,b[4][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) a[i][j]=n++; //作用是自动加一来生成连续的矩阵; for(i=0;i<3;i++) //此后的...
数据结构(C语言版 严蔚敏著)——数组和广义表
这一章只要理解,不作深入要求 数组顺序存储结构以及一些操作 #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #define MAX_ARRAY_DIM 8 typedef int ElemType; typedef struct { ElemType *base; //数组元素...
数据结构学习——数组和广义表(上)
PART ONE——数组 PS:三个头文件互相关联 1.三元组顺序表实现矩阵的转置运算 /* matrix.h */ #pragma once #include<stdio.h> #include<stdlib.h> #include<Windows.h> #define MAXSIZE 50 typedef struct { int Row; //...
MFC与坦克大战系列(奇迹冬瓜)---chapter3(坦克属性定义与坦克的平滑移动)
今天我们继续坦克大战系列。我将沿用chapter2的代码继续为大家讲解。由于计划的修订第三节先完成我方坦克的移动。主要的操作流程如下: (一)首先打开上一节的代码,然后在资源解决方案中头文件和主文件的地方添加程序要自己定义的坦克的类和方法。 主要操作位右键头文件->头文件->新建项->.h文件 命名为Thing 在Thing.h里面添加的代码如下 附图。 #include "stdafx.
2227



被折叠的 条评论
为什么被折叠?



