写了两个小时,书上代码好难看啊

#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稀疏矩阵的更多相关文章

  1. 远程调用与编译DS作业

    1.编译服务器上的ds作业 dscc /d 服务器地址:端口 /u 用户名 /p 密码 工程名称 /J 作业名称 解释: 作业名称:直接写作业名称即可,不用.pjb 2.执行服务器上的ds作业 dsj ...

  2. Datastage8.5导入导出DS作业例子

    以下为Datastage8.5的命令行方式的导入和导出,直接登陆服务器执行如下命令即可.不是Datastage客户端的导入和导出,使用命令行方式的好处是:可以将该命令使用shell脚本进行调用导入和导 ...

  3. DS博客作业——树

    DS博客作业--树 1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会. 在树这一章节,我们学习的是二叉树的算法. 树的构建:一种是直接给树的顺序存储结构的字符串,一种是通过先序遍历和 ...

  4. DS博客作业08--课程总结

    DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...

  5. DS博客作业--07查找

    目录 DS博客作业--07查找 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 2.1.题目1:6-1 二叉搜索树的操作集 (30 分 ...

  6. DS博客大作业--树(李天明组)

    DS博客大作业--树 大作业博客要求 (10分) 1.树的存储结构说明 .树采用的是链式存储结构. .这段代码中定义了两个结构体.第一个是自定义为Name类型的结构体,里面的成员有字符串str和类型为 ...

  7. DS博客作业05--查找

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...

  8. DS博客作业04--图

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...

  9. DS博客作业03--树

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业03--树 这个作业的目标 学习树结构设计及运算操作 姓名 黄静 目录 0. PTA得分截图 1. 本周学习总结 ...

随机推荐

  1. alter日志报WARNING: too many parse errors

    数据库版本:12.2.0 操作系统版本:RHEL7.2 最近观察到一个数据库alert日志老是报硬解析太多错误,且对应的sql语句都是查看数据字典表: 2017-06-16T08:46:46.4174 ...

  2. 【LeetCode-面试算法经典-Java实现】【062-Unique Paths(唯一路径)】

    [062-Unique Paths(唯一路径)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 A robot is located at the top-left c ...

  3. 分析各种Android设备屏幕分辨率与适配 - 使用大量真实安卓设备采集真实数据统计

    一. 数据采集 源码GitHub地址 : -- SSH : git@github.com:han1202012/DisplayTest.git; -- HTTP : https://github.co ...

  4. 如何禁止VS显示“You have mixed tabs and spaces. Fix this?”

    如何禁止VS显示“You have mixed tabs and spaces. Fix this?” VS2013 版本的解决方案: Vs2013  IDE下,编辑C++的工程源码,在打开文件的时候 ...

  5. Windows 7 设置允许多用户同时远程桌面连接

    有时候我们服务器安装的是Win7系统,远程登录桌面时,即使登录的是不同的管理账号,还是会提示把远程登录的人给踢下来.即系统只允许存在一个远程会话窗,不管是不是相同的用户. 下面讲解如何设置Win7让多 ...

  6. [k8s]k8s pod的4种网络模式最佳实战(externalIPs )

    hostPort相当于docker run -p 8081:8080,不用创建svc,因此端口只在容器运行的vm上监听 缺点: 没法多pod负载 $ cat pod-hostport.yaml api ...

  7. CefSharp 封装自己的简单H5浏览器 详细配置

    下载了最新的CefSharp源码,发现在自己机器可以运行,到普通的WIN7系统 报了  System.IO.FileNotFoundException: Could not load file or  ...

  8. Mybatis(二)基于注解的入门实例

    前言 上一篇简单的介绍了Mybatis的概念和基于XML来实现数据库的CRUD,这篇给大家实现基于注解的CRUD. 一.初始搭建 在基于注解当中前四步和上一篇基于XML是一样的,分别是: 1)创建数据 ...

  9. nginx-启动|关闭|重新加载配置文件的命令

    1.1 进入操作目录 D: cd D:\NginxTest\nginx-1.10.2 1.2 启动指令 nginx -c conf\nginx.conf 1.3 关闭指令 nginx -s stop ...

  10. MapReduce处理HBase出错:XXX.jar is not a valid DFS filename

    原因:Hadoop文件系统没有检查路径时没有区分是本地windows系统还是Hadoop集群文件系统 解决:  只需将Map和Reduce的init方法最后一个参数(boolean addDepend ...