没有合适的资源?快使用搜索试试~ 我知道了~
矩阵的压缩存储--三元组顺序表(矩阵的转置)代码.txt
需积分: 43 3 下载量 128 浏览量
2020-04-21
17:40:21
上传
评论
收藏 3KB TXT 举报
温馨提示
试读
6页
矩阵的压缩存储--三元组顺序表(矩阵的转置)通过这种存储方式实行转置,让其更好的学习这种存储形式。解决思路: 将矩阵行、列维数互换 将每个三元组中的i和j相互调换 重排三元组次序
资源推荐
资源详情
资源评论
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<fstream>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 12500
typedef int ElemType;
typedef int Status;
using namespace std;
typedef struct
{
int i, j; //该非零元的行下标和列下标
ElemType e; // 该非零元的值
}Triple; // 三元组类型
typedef struct
{
Triple data[MAXSIZE + 1];
int mu, nu, tu;
}TSMatrix; // 稀疏矩阵类型
//创建矩阵//
Status CreateSMatrix(TSMatrix &S)
{
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<fstream>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 12500
typedef int ElemType;
typedef int Status;
using namespace std;
typedef struct
{
int i, j; //该非零元的行下标和列下标
ElemType e; // 该非零元的值
}Triple; // 三元组类型
typedef struct
{
Triple data[MAXSIZE + 1];
int mu, nu, tu;
}TSMatrix; // 稀疏矩阵类型
//创建矩阵//
Status CreateSMatrix(TSMatrix &S)
{
TSMatrix M,N;
int col,t,p,q,num[MAXSIZE],cpot[MAXSIZE];
int i;
cout<<"请输入行数、列数和非零元的个数"<<endl;
cin>>M.mu >>M.nu >>M.tu;
for(i=1;i<=M.tu;i++)
{
m:cout<<"请输入第"<<i<<"个非零元的行号、列号和值"<<endl;
cin>>M.data[i].i>>M.data[i].j>>M.data[i].e;
if(M.data[i].i>M.mu || M.data[i].j>M.nu)
{
cout<<"请重新输入"<<endl;
goto m;
}
}
//进行列排序//
N.mu = M.nu; N.nu = M.mu; N.tu = M.tu;
if (N.tu)
{
for(col=1; col<=M.nu; ++col)
num[col] = 0;
for(t=1; t<=M.tu; ++t)
++num[M.data[t].j];// 求 M 中每一列所含非零元的个数
cpot[1] = 1;
for (col=2; col<=M.nu; ++col)
cpot[col] = cpot[col-1]+num[col-1];// 求 M 中每一列的第一个非零元在 b.data 中的序号
for (p=1; p<=M.tu; ++p)
{
col = M.data[p].j;
q = cpot[col];
int col,t,p,q,num[MAXSIZE],cpot[MAXSIZE];
int i;
cout<<"请输入行数、列数和非零元的个数"<<endl;
cin>>M.mu >>M.nu >>M.tu;
for(i=1;i<=M.tu;i++)
{
m:cout<<"请输入第"<<i<<"个非零元的行号、列号和值"<<endl;
cin>>M.data[i].i>>M.data[i].j>>M.data[i].e;
if(M.data[i].i>M.mu || M.data[i].j>M.nu)
{
cout<<"请重新输入"<<endl;
goto m;
}
}
//进行列排序//
N.mu = M.nu; N.nu = M.mu; N.tu = M.tu;
if (N.tu)
{
for(col=1; col<=M.nu; ++col)
num[col] = 0;
for(t=1; t<=M.tu; ++t)
++num[M.data[t].j];// 求 M 中每一列所含非零元的个数
cpot[1] = 1;
for (col=2; col<=M.nu; ++col)
cpot[col] = cpot[col-1]+num[col-1];// 求 M 中每一列的第一个非零元在 b.data 中的序号
for (p=1; p<=M.tu; ++p)
{
col = M.data[p].j;
q = cpot[col];
剩余5页未读,继续阅读
资源评论
weixin_46995652
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功