c语言版数据结构(奇迹冬瓜)-数组和广义表(稀疏矩阵的转置算法一)

【C语言程序设计】利用数组解决线性代数中的矩阵转置问题! 本实例是利用数组解决线性代数中的矩阵转置问题。 设有一矩阵为 m×n 阶(即 m 行 n 列),第 i 行 j 列的元素是 a(i,j),需要将该矩阵转置为 n×m 阶的矩阵,使其中元素满足 b(j,i)=a(i,j)。 算法思想 由数学知识可知,将第一个矩阵的所有元素绕着一条从第一行第一列出发的右下角 45° 的射线做镜面反转,即可得到该矩阵的转置。 程序代码 #include <stdio.h> int main() { int i,j,i1,j1,a[... 阅读详情
//稀疏矩阵
/*
  |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();
}

数据结构实验报告4-数组与广义表-基于十字链表的稀疏矩阵转置-实验内容及要求.docx 编写程序,从字符文件读入三个正整数m, n, t以及t个三元组(i, j, e)建立稀疏矩阵的十字链表存储结构。其中,m、n分别表示矩阵行数和列数;i, j为非零元素行号和列号。编写算法,实现矩阵转置,输出转置后的三元组到另一字符文件中,检查你的转置结果是否正确。要求转置时不得新建元素结点(但允许新建行头/列头结点数组以及删除行头/列头结点数组,转置前后,总头结点不允许改变) 立即下载

相关推荐

数据结构C语言版系数矩阵的转置

数据结构C语言版系数矩阵的转置,包括结构的定义和转置的实现。

数据结构-数组(稀疏矩阵转置)和广义表

数组是一种用于存储多个相同类型数据的集合,其元素在内存中连续存放并按照一定的顺序排列。这种有序性和连续性使得数组在访问时具有较高的效率。数组的特点包括所有元素具有相同的数据类型、可以通过索引快速访问任意元素、支持各种操作如遍历和排序等,并且数组的定义和初始化方式在不同编程语言中有所不同。int i,j;//该非零元的行下标和列下标ElemType e;}Triple;//非零元三元组表,data[0]未用//矩阵的行数、列数和非零元总数TSMatrix;int i,j;//该非零元的行和列下标。

2301_79704601的博客 2227

数据结构实验 数组和广义表

数组和广义表 一、实验名称:数组和广义表 二、实验目的: (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...

weixin_30617737的博客 412

实战避坑:在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训练集群的数据传输效率。

weixin_33720078的博客 446

Arduino--土壤湿度传感器使用(电阻式)

最近买了一个土壤湿度检测传感器,实物图是这样的: 我买这个模块是想要得到土壤湿度的模拟量。但我买的时候忘了买左边的蓝色模块,我开始以为这个模块是有运放功能的,但实际它是一个电压比较器和一个分压电路。 其模块的接线如图: 该模块的四线是带模拟量输出的,三线的只输出一个到达阈值的标志量。该模块的原理图如下: 该模块的测试原理为:把土壤当成一个可变电阻,随着土壤含水量的增加,土壤电阻减小。而该传感器其实就是两个电极,用来接土壤这个可变电阻。一般湿度的土壤电阻大概在几百K左右,其串连的分压电阻应该在这个数量级。

weixin_41866783的博客 1万+

数据结构(四)——数组与广义表之三元矩阵的快速转置

数组 数组的类型定义 数组的组成:下标、值 数组的特点:元素属于同一种数据类型、具有固定格式和数量的数据集合 数组的顺序表示和实现 数组的存储结构:数组是多维结构,而存储空间是一个一维的结构 二维数组的存储域寻址——不同的存储方式有不同元素地址计算方法:大部分按行优先 矩阵的压缩存储 特俗矩阵的压缩存储:稀疏矩阵(矩阵中有许多特定的值)、特殊矩阵(矩阵中很多值相同的元素并且它们的分布有一...

Double___H的博客 1165

神经算子:突破科学计算瓶颈的函数空间映射技术

神经算子(Neural Operators)是深度学习在科学计算领域的重要突破,它从根本上改变了处理连续物理问题的方式。与传统神经网络学习离散数据点映射不同,神经算子学习的是函数空间到函数空间的映射,这种范式转换使其具备离散化收敛性和超分辨率预测能力。在计算流体力学、天气预报等需要求解偏微分方程的场景中,神经算子能够在保持精度的同时将计算速度提升数个数量级。傅里叶神经算子(FNO)通过快速傅里叶变换实现高效计算,特别适合规则网格问题;而图神经算子(GNO)则擅长处理不规则网格和复杂几何形状。这种技术为参数敏

cuililai5127的博客 446

数据结构——数组和广义表(三元顺序表之一般转置和快速转置)

辛辛苦苦写的代码,点个赞再走呗 里面还有注释呢 #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...

北国觅梦 289

模拟IC实战—30天精通Sigma-delta(Σ-Δ) ADC 行为级建模与仿真

本文为模拟IC工程师提供了一套为期30天的Sigma-delta ADC行为级建模与仿真实战指南。文章深入浅出地阐释了Sigma-delta ADC如何通过过采样和噪声整形两大核心技术实现高精度转换,并重点演示了如何使用Python从零搭建一阶和二阶调制器模型,进行性能仿真与关键指标分析,为后续电路级设计提供清晰的性能预算和架构指导。

weixin_29237635的博客 400

不用U盘也能装Ubuntu?手把手教你用EasyUEFI搞定双系统(附企业版资源)

本文详细介绍了无需U盘即可安装Ubuntu双系统的方法。通过使用EasyUEFI工具,在Windows环境下创建虚拟启动分区并配置UEFI引导,即可直接从硬盘启动Ubuntu安装程序。该方法特别适合开发者或技术爱好者快速搭建Linux开发环境,操作安全便捷,无需额外物理介质。

weixin_29215391的博客 287

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:

runner2012的专栏 3300

Flutter 完整学习文档 - 从入门到精通

Widget 就像乐高积木,Flutter 中所有的东西都是 Widget。一个按钮是 Widget,一段文字是 Widget,甚至布局、边距、对齐方式也是 Widget!"万物皆 Widget"

zwjapple的专栏 2321

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

runner2012的专栏 3420

YOLO11改进-注意力-引入多尺度注意力聚合(MSAA)模块

对来自backbone的特征进行细化处理。通过空间和通道两个路径的操作,增强了空间和通道方面的特征信息,使得输出的特征图在空间和通道维度上都更加优质。1. 在空间细化路径中,通过对不同核大小的卷积进行求和以及一系列的空间特征聚合操作,实现了多尺度空间信息的融合。2. 在通道聚合路径中,通过全局平均池化、卷积和激活等操作生成通道注意力图,并与空间细化后的图相结合,实现了通道维度上的多尺度信息融合。

qq_64693987的博客 4679

倍福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。

weixin_41883890的博客 2347

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

runner2012的专栏 3182

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

littlebeat123的专栏 2123

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

ming101593的专栏 1402

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

数据结构实验之数组二:稀疏矩阵

sdut原题链接数据结构实验之数组二:稀疏矩阵 Time Limit: 5MS Memory Limit: 1000KBProblem Description 对于一个n*n的稀疏矩阵M(1 <= n <= 1000),采用三元组顺序表存储表示,查找从键盘输入的某个非零数据是否在稀疏矩阵中,如果存在则输出OK,不存在则输出ERROR。稀疏矩阵示例图如下: Input 连续输入多组数据,每组数

BlessingXRY的博客 691

第五章 数组和广义表(4)三元组矩阵转换(转)

#include &lt;stdio.h&gt; #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 typedef int Status; typedef float ElemType; typedef struct{//三元组结构 ...

qq_40191710的博客 341

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

sunshine_rebrith的博客 2811

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++) //此后的...

狮子座的男孩 2230

数据结构(C语言版 严蔚敏著)——数组和广义表

这一章只要理解,不作深入要求 数组顺序存储结构以及一些操作 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdarg.h&gt; #define MAX_ARRAY_DIM 8 typedef int ElemType; typedef struct { ElemType *base; //数组元素...

Super_Sloppy的博客 1626

数据结构学习——数组和广义表(上)

PART ONE——数组 PS:三个头文件互相关联 1.三元组顺序表实现矩阵的转置运算 /* matrix.h */ #pragma once #include<stdio.h> #include<stdlib.h> #include<Windows.h> #define MAXSIZE 50 typedef struct { int Row; //...

weixin_43090272的博客 236

MFC与坦克大战系列(奇迹冬瓜)---chapter3(坦克属性定义与坦克的平滑移动)

今天我们继续坦克大战系列。我将沿用chapter2的代码继续为大家讲解。由于计划的修订第三节先完成我方坦克的移动。主要的操作流程如下: (一)首先打开上一节的代码,然后在资源解决方案中头文件和主文件的地方添加程序要自己定义的坦克的类和方法。 主要操作位右键头文件->头文件->新建项->.h文件 命名为Thing 在Thing.h里面添加的代码如下 附图。 #include "stdafx.

runner2012的专栏 7389
上一篇: c语言版数据结构(奇迹冬瓜)-数组和广义表(多维数组的基本操作)
下一篇: (游戏编程-01)MFC版坦克大战(奇迹冬瓜)
utral董东东
博客等级 码龄16年 158粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值