IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C 稀疏矩阵 实现文件 -> 正文阅读

[C++知识库]C 稀疏矩阵 实现文件

?测试输入:
5?5?6?//输入矩阵A的总行数、总列数及非零元个数
0?2?-9?0?4?5?1?0?-7?1?2?7?3?1?8?4?2?9?//按行序输入矩阵A的各个非零元素的行号、列号及值

预期输出:
The?Matrix?A:
(0,2,-9)
(0,4,5)
(1,0,-7)
(1,2,7)
(3,1,8)
(4,2,9)
The?Transport?Matrix?of?A:
(0,1,-7)
(1,3,8)
(2,0,-9)
(2,1,7)
(2,4,9)
(4,0,5)?//末尾换行

#include<stdio.h>
#include<string.h>
#define OK 1
#define Maxsize 10   //用户自定义三元组最大长度
typedef struct     //定义三元组表
{
	int i,j;
	int v;
 }SPNode;
 typedef struct  //定义三元组表
 {
 	SPNode data[Maxsize];
 	int m,n,t;  //矩阵行,列及三元组表长度 
  }SPMatrix;
  void InitSPNode(SPMatrix *a)  //输入三元组表
  
  {
  	int i,j,k,val,maxrow,maxcol;
	 maxrow=0;
	 maxcol=0;
	 i=j=0;
	 k=0;
	 while(i!=-1&&j!=-1)     //两个其中一个等于-1结束输入
	 {
	 	printf("输入(行 列 值):");
		scanf("%d %d %d",&i,&j,&val);
		a->data[k].i=i;
		a->data[k].j=j;
		a->data[k].v=val;
		if(maxrow<i)maxrow=i;
	    if(maxcol<j)maxcol=j;
	    k++;
	  } 
	  a->m=maxrow;a->n=maxcol;a->t=k-1;
   } 
   void showMatrix(SPMatrix *a)   //输出稀疏矩阵 
   {
   	int p,q;
   	int t=0;
   	for(p=0;p<=a->m;p++)
   	{for(q=0;q<=a->n;q++)
   	  { if(a->data[t].i==p&&a->data[t].j==q)
   	    { printf("%d ",a->data[t].v);
   	       t++;
		} 
		else printf("0 ");
	  }
	  printf("\n");
	}
  }
  void TransposeSMatrix(SPMatrix *a,SPMatrix *b)   //稀疏矩阵转置
  {
  	int q,col,p;
	  b->m=a->n;b->n=a->m; b->t=a->t;
	  if(b->t)
	  {
	  	q=0;
	  	for(col=0;col<=a->n;++col)   //按a的列序转置
		  for(p=0;p<a->t;++p)      //扫描整个三元组表
		   if(a->data[p].j==col)
		   {
		   	  b->data[q].i=a->data[p].j;
		   	  b->data[q].j=a->data[p].i;
		   	  b->data[q].v=a->data[p].v;
		   	  ++q;
			} 
	  }
   } 
   void main(void)
   {
   	SPMatrix a,b;
   	printf("\n  结束请输入(-1,-1,-1)\n");
   	InitSPNode(&a);
   	printf("输入矩阵为:\n");
   	showMatrix(&a);    //转置前
	TransposeSMatrix(&a,&b);
	printf("输出矩阵为:\n");
	showMatrix(&b);    //转置后 
   } 
/*************************************************************
    稀疏矩阵  实现文件
    更新于2020年10月28日
**************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "SparseMatrix.h"

void input(SPMatrix &a)//输入采用三元组顺序表存储的矩阵
{
	int p;
	scanf("%d%d%d",&a.m,&a.n,&a.t); //输入矩阵总行数、总列数和非零元素的个数
	for(p=0;p<a.t;p++)
		scanf("%d%d%d",&a.data[p].i,&a.data[p].j,&a.data[p].v);
}
void output(SPMatrix a)//输出矩阵的三元组表
{
	int p;
	for(p=0;p<a.t;p++)
		printf("(%d,%d,%d)\n",a.data[p].i,a.data[p].j,a.data[p].v);
}
void TransSMatrix(SPMatrix a, SPMatrix &b)//一般转置,即:按列序转置
{
	// 请在这里补充代码,完成本关任务
    /********** Begin *********/

int q , col , p;
b . m = a . n;
b . n = a . m;
b . t = a . t;
if(b . t)
{
q = 0;
for(col = 0 ; col <= a . n ; ++col)
{
for(p = 0 ; p < a . t ; ++p)
{
if(a. data[p].j == col)
{
b. data[q].i = a. data[p].j;
b.data[q].j = a. data[p].i;
b. data[q].v = a. data[p].v;
++q;
}
}
}
}

	
    /********** End **********/
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:24:29  更:2022-04-26 11:27:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:52:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码