【作业】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】cmd条件判断
			
1.判断驱动器.文件或文件夹是否存在,用 if exist 语句: 2.判断某两个字符串是否相等,用 if "字符串1"=="字符串2" 语句: 3.判断某两个 ...
 - Effective Java 第三版——54. 返回空的数组或集合不要返回null
			
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
 - [转]Linux性能分析工具汇总合集
			
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
 - Hexo NexT 博客后台管理指南
			
上篇文章讲到,将Hexo NexT 博客成功上传到GitHub 并绑定到我们自定义的域名下了. 但是却还是有个问题,那就是Hexo NexT 博客如何进行后台管理呢? 如果总是通过手动创建文件的方式, ...
 - 严苛模式 strictmode
			
参考链接 http://blog.csdn.net/brokge/article/details/8543145 一.严苛模式-虚拟机策略 虚拟机策略(VmPolicy)能检查内存泄漏,譬如,当关闭一 ...
 - 在 Redis 上实现的分布式锁
			
由于近排很忙,忙各种事情,还有工作上的项目,已经超过一个月没写博客了,确实有点惭愧啊,没能每天或者至少每周坚持写一篇博客.这一个月里面接触到很多新知识,同时也遇到很多技术上的难点,在这我将对每一个有用 ...
 - jupyter修改根目录
			
找到jupyter的快捷方式,然后修改目标: 首先在快捷方式上右键单击,选择属性: 然后将目标那里替换自己想要的目录: 网上有的教程说保留%USERPROFILE%,其实这是受系统对路径解析的影响的. ...
 - git-ftp代码部署方式
			
虽然如今ci方法已经在很多团队使用了,但对于一些个人性的基于PHP的跑在虚拟主机的小项目,既没有服务端的Git环境,又不想时刻跑一个Genkins,就只能回到原始的FTP上传了. 所幸有了git-ft ...
 - Java知多少(49)throw:异常的抛出
			
到目前为止,你只是获取了被Java运行时系统抛出的异常.然而,程序可以用throw语句抛出明确的异常.Throw语句的通常形式如下: throw ThrowableInstance;这里,Thr ...
 - Windows平台使用RMAN命令自动删除Oracle过期归档日志的方法
			
自动删除Oracle过期归档日志的思路如下: 1.编写自动执行的bat脚本文件: 2.Windows设置定期执行计划 OracleArchLogClear.bat D:/Oracle/product/ ...