【作业】DS稀疏矩阵
写了两个小时,书上代码好难看啊
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string.h> #define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
#define OVERFLOW -1 #define MAXSIZE 12500 typedef int Status;
typedef int ElemType; using namespace std;
struct triple {
int i, j;//row,col
ElemType e;
triple(int i=, int j=, ElemType e=) :i(i), j(j), e(e) {}
}; typedef struct {
triple data[MAXSIZE + ];
int mu, nu, tu;//row,col,ele
}TSMatrix; typedef struct {
triple data[MAXSIZE + ];
int rpos[MAXSIZE + ];
int mu, nu, tu;//row,col,ele
}RLSMatrix;
int num[MAXSIZE], cpot[MAXSIZE],ctemp[MAXSIZE];
TSMatrix T, M;
RLSMatrix m, n,q; Status TransposeSMatrix(TSMatrix M, TSMatrix &T) {
T.mu = M.nu, T.nu = M.mu, T.tu = M.tu;
if (T.tu) {
int q = ;
for (int col = ; col < M.nu; col++)
for(int p=;p<M.tu;p++)
if (col == M.data[p].j) {
T.data[q].i = M.data[p].j;
T.data[q].j = M.data[p].i;
T.data[q].e = M.data[p].e;
q++;
}
}
return OK;
} Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T) {
T.mu = M.nu, T.nu = M.mu, T.tu = M.tu;
if (T.tu) {
for (int col = ; col < M. nu; col++)num[col] = ;
for (int t = ; t < M.tu; t++)num[M.data[t].j]++;
cpot[] = ;
for (int col = ; col < M.nu; col++)cpot[col] = cpot[col - ] + num[col - ];
for (int p = ; p < M.tu; p++) {
int q = cpot[M.data[p].j];
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[M.data[p].j]++;
}
}
return OK;
} Status Setrpos(RLSMatrix& M) {
for (int row = ; row < M.mu; row++)num[row] = ;
for (int t = ; t < M.tu; t++)num[M.data[t].i]++;
M.rpos[] = ;
for (int row = ; row < M.mu; row++)M.rpos[row] = M.rpos[row - ] + num[row - ];
return OK;
} Status MultMatrix(RLSMatrix M, RLSMatrix N, RLSMatrix &Q) {
if (M.nu != N.mu)return ERROR;
Q.mu = M.mu; Q.nu = N.nu; Q.tu = ;
if (M.tu*N.tu != ) {
for (int arow = ; arow < M.mu; arow++) {
memset(ctemp, , sizeof(ctemp));
Q.rpos[arow] = Q.tu + ;
int tp = ; if (arow < M.mu-)tp = M.rpos[arow + ]; else tp = M.tu + ;//tp
for (int pp = M.rpos[arow]; pp < tp; pp++) {
int brow = M.data[pp].j; //brow
int t = ; if (brow < N.mu-)t = N.rpos[brow + ]; else t = N.tu + ;//t
for (int qq = N.rpos[brow]; qq < t; qq++) {
ctemp[N.data[qq].j] += M .data[pp].e*N.data[qq].e;//ctemp
}//for q;
}//for p
for (int ccol = ; ccol < Q.nu; ccol++)if (ctemp[ccol]) {
if (++Q.tu > MAXSIZE)return ERROR;
Q.data[Q.tu-] = triple(arow, ccol, ctemp[ccol]); }
}//for aarow
}//if !=0
return OK;
} Status Read(TSMatrix& M) {
if (scanf("%d%d%d", &M.mu, &M.nu, &M.tu) != )return FALSE;
else {
//cin >> M.mu >> M.nu >> M.tu;
for (int i = ; i < M.tu; i++) {
cin >> M.data[i].i >> M.data[i].j >> M.data[i].e;
}
return OK;
}
} Status Read(RLSMatrix& M) {
if (scanf("%d%d%d", &M.mu, &M.nu, &M.tu) != )return FALSE;
else {
//cin >> M.mu >> M.nu >> M.tu;
for (int i = ; i < M.tu; i++) {
cin >> M.data[i].i >> M.data[i].j >> M.data[i].e;
}
return OK;
}
} Status Print(TSMatrix T) {
for (int i = ; i < T.tu; i++) {
printf("%5d%5d%5d\n", T.data[i].i, T.data[i].j, T.data[i].e);
}
return OK;
} Status Print(RLSMatrix T) {
for (int i = ; i < T.tu; i++) {
printf("%5d%5d%5d\n", T.data[i].i, T.data[i].j, T.data[i].e);
}
return OK;
} Status PrintFormat(TSMatrix T) {
int cnt = ;
for (int i = ; i < T.mu; i++) {
for (int j = ; j < T.nu; j++) {
if (T.data[cnt].i == i&&T.data[cnt].j == j)
printf("%5d", T.data[cnt++].e);
else printf("%5d", );
}
cout << endl;
}
return OK;
} Status PrintFormat(RLSMatrix T) {
int cnt = ;
for (int i = ; i < T.mu; i++) {
for (int j = ; j < T.nu; j++) {
if (T.data[cnt].i == i&&T.data[cnt].j == j)
printf("%5d", T.data[cnt++].e);
else printf("%5d", );
}
cout << endl;
}
return OK;
} int main() {
while (Read(m)) {
Read(n);
//cout << 1 << endl; Setrpos(m); Setrpos(n);
//Print(M); cout << endl;
puts("A:");
PrintFormat(m); cout << endl;
puts("B:");
PrintFormat(n); cout << endl;
MultMatrix(m, n, q);
puts("A*B:");
PrintFormat(q);
//Print(q);
}
//system("pause");
}
/*
3 4 4
0 0 3
0 3 5
1 1 -1
2 0 2 4 2 4
0 1 2
1 0 1
2 0 -2
2 1 4 */
【作业】DS稀疏矩阵的更多相关文章
- 远程调用与编译DS作业
1.编译服务器上的ds作业 dscc /d 服务器地址:端口 /u 用户名 /p 密码 工程名称 /J 作业名称 解释: 作业名称:直接写作业名称即可,不用.pjb 2.执行服务器上的ds作业 dsj ...
- Datastage8.5导入导出DS作业例子
以下为Datastage8.5的命令行方式的导入和导出,直接登陆服务器执行如下命令即可.不是Datastage客户端的导入和导出,使用命令行方式的好处是:可以将该命令使用shell脚本进行调用导入和导 ...
- DS博客作业——树
DS博客作业--树 1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会. 在树这一章节,我们学习的是二叉树的算法. 树的构建:一种是直接给树的顺序存储结构的字符串,一种是通过先序遍历和 ...
- DS博客作业08--课程总结
DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...
- DS博客作业--07查找
目录 DS博客作业--07查找 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 2.1.题目1:6-1 二叉搜索树的操作集 (30 分 ...
- DS博客大作业--树(李天明组)
DS博客大作业--树 大作业博客要求 (10分) 1.树的存储结构说明 .树采用的是链式存储结构. .这段代码中定义了两个结构体.第一个是自定义为Name类型的结构体,里面的成员有字符串str和类型为 ...
- DS博客作业05--查找
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...
- DS博客作业04--图
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...
- DS博客作业03--树
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业03--树 这个作业的目标 学习树结构设计及运算操作 姓名 黄静 目录 0. PTA得分截图 1. 本周学习总结 ...
随机推荐
- Windows 7 设置允许多用户同时远程桌面连接
有时候我们服务器安装的是Win7系统,远程登录桌面时,即使登录的是不同的管理账号,还是会提示把远程登录的人给踢下来.即系统只允许存在一个远程会话窗,不管是不是相同的用户. 下面讲解如何设置Win7让多 ...
- 用.NET CORE做项目,VS里编译碰到‘。。。。包降级。。。。’错误
用.NET CORE做项目,VS里编译碰到‘....包降级....’错误 本地开发机:WIN10+VS2017 15.7.3 ,用CORE2.1版本的建立一个项目,做好了,传到gitee上 今天有新同 ...
- IP子系统集成
IP子系统集成 1.Creating External Connections 由此可以看出:block design的设计是可以连接电路板上的CPU的(外挂CPU). 2.生成外部接口 端口生成之后 ...
- 超级NB的防DDOS(小量级)攻击的脚本
# tree /usr/local/ddos/ /usr/local/ddos/ ├── ddos.conf ├── ddos.sh ├── ignore.ip.list └── LICENSE di ...
- class path and classloader
https://www.artima.com/insidejvm/ed2/linkmod5.html https://www.artima.com/insidejvm/ed2/securityP.ht ...
- python工具 - 从文件名读取特定信息到excel表格
情景:文件名中包含学号和用户名,其中用户名在前学好在后,学号为2位,如harry33.txt.natasha12.txt. 要求:将多个文件名中的用户名与学号分开并保存到excle中. 代码部分: i ...
- git push 失败
先上图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvV29KaWFvRGFaaG9uZw==/font/5a6L5L2T/fontsize/400/fil ...
- 在android 上 使用 rxjava 入门篇
什么是 rxJava? RxJava is a Java VM implementation of Reactive Extensions: a library for composing async ...
- [js] 处理字符串换行造成的json解析失败
需求:从数据库某个字段取出字符串出来,转为json,结果发现报错为 解析失败,发现是因为取出的字符串换行导致,现在需要将字符串里面的换行替换为'',使字符串可依成功解析成json对象. 技术:依靠re ...
- Go指南_指针接收者
源地址 https://tour.go-zh.org/methods/4 一.描述 你可以为指针接收者声明方法. 这意味着对于某类型 T,接收者的类型可以用 *T 的文法.(此外,T 不能是像 *in ...