第九周 项目三--稀疏矩阵的三元组表示的实现及应用
tup.h
- #ifndef TUP_H_INCLUDED
- #define TUP_H_INCLUDED
- #define M 6
- #define N 7
- #define MaxSize 100 //矩阵中非零元素最多个数
- typedef int ElemType;
- typedef struct
- {
- int r; //行号
- int c; //列号
- ElemType d; //元素值
- } TupNode; //三元组定义
- typedef struct
- {
- int rows; //行数
- int cols; //列数
- int nums; //非零元素个数
- TupNode data[MaxSize];
- } TSMatrix; //三元组顺序表定义
- void CreatMat(TSMatrix &t,ElemType A[M][N]); //从一个二维稀疏矩阵创建其三元组表示
- bool Value(TSMatrix &t,ElemType x,int i,int j); //三元组元素赋值
- bool Assign(TSMatrix t,ElemType &x,int i,int j); //将指定位置的元素值赋给变量
- void DispMat(TSMatrix t);//输出三元组
- void TranTat(TSMatrix t,TSMatrix &tb);//矩阵转置
- #endif // TUP_H_INCLUDED
tup.cpp
- #include "stdio.h"
- #include "tup.h"
- void CreatMat(TSMatrix &t,ElemType A[M][N]) //从一个二维稀疏矩阵创建其三元组表示
- {
- int i,j;
- t.rows=M;
- t.cols=N;
- t.nums=0;
- for (i=0; i<M; i++)
- {
- for (j=0; j<N; j++)
- if (A[i][j]!=0) //只存储非零元素
- {
- t.data[t.nums].r=i;
- t.data[t.nums].c=j;
- t.data[t.nums].d=A[i][j];
- t.nums++;
- }
- }
- }
- bool Value(TSMatrix &t,ElemType x,int i,int j) //三元组元素赋值
- {
- int k=0,k1;
- if (i>=t.rows || j>=t.cols)
- return false; //失败时返回false
- while (k<t.nums && i>t.data[k].r) k++; //查找行
- while (k<t.nums && i==t.data[k].r && j>t.data[k].c) k++;//查找列
- if (t.data[k].r==i && t.data[k].c==j) //存在这样的元素
- t.data[k].d=x;
- else //不存在这样的元素时插入一个元素
- {
- for (k1=t.nums-1; k1>=k; k1--)
- {
- t.data[k1+1].r=t.data[k1].r;
- t.data[k1+1].c=t.data[k1].c;
- t.data[k1+1].d=t.data[k1].d;
- }
- t.data[k].r=i;
- t.data[k].c=j;
- t.data[k].d=x;
- t.nums++;
- }
- return true; //成功时返回true
- }
- bool Assign(TSMatrix t,ElemType &x,int i,int j) //将指定位置的元素值赋给变量
- {
- int k=0;
- if (i>=t.rows || j>=t.cols)
- return false; //失败时返回false
- while (k<t.nums && i>t.data[k].r) k++; //查找行
- while (k<t.nums && i==t.data[k].r && j>t.data[k].c) k++;//查找列
- if (t.data[k].r==i && t.data[k].c==j)
- x=t.data[k].d;
- else
- x=0; //在三元组中没有找到表示是零元素
- return true; //成功时返回true
- }
- void DispMat(TSMatrix t) //输出三元组
- {
- int i;
- if (t.nums<=0) //没有非零元素时返回
- return;
- printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums);
- printf("\t------------------\n");
- for (i=0; i<t.nums; i++)
- printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d);
- }
- void TranTat(TSMatrix t,TSMatrix &tb) //矩阵转置
- {
- int p,q=0,v; //q为tb.data的下标
- tb.rows=t.cols;
- tb.cols=t.rows;
- tb.nums=t.nums;
- if (t.nums!=0) //当存在非零元素时执行转置
- {
- for (v=0; v<t.cols; v++) //tb.data[q]中的记录以c域的次序排列
- for (p=0; p<t.nums; p++) //p为t.data的下标
- if (t.data[p].c==v)
- {
- tb.data[q].r=t.data[p].c;
- tb.data[q].c=t.data[p].r;
- tb.data[q].d=t.data[p].d;
- q++;
- }
- }
- }
main.cpp
- /*
- Copyright (c)2016,烟台大学计算机与控制工程学院
- All rights reserved.
- 文件名称:3.cpp
- 作 者: 陈朋
- 完成日期:2016年11月3日
- 版 本 号:v1.0
- 问题描述:
- 输入描述:无
- 程序输出:若干。
- */
- #include <stdio.h>
- #include "tup.h"
- int main()
- {
- TSMatrix t,tb;
- int x,y=10;
- int A[6][7]=
- {
- {0,0,1,0,0,0,0},
- {0,2,0,0,0,0,0},
- {3,0,0,0,0,0,0},
- {0,0,0,5,0,0,0},
- {0,0,0,0,6,0,0},
- {0,0,0,0,0,7,4}
- };
- CreatMat(t,A);
- printf("b:\n");
- DispMat(t);
- if (Assign(t,x,2,5)==true) //调用时返回true
- printf("Assign(t,x,2,5)=>x=%d\n",x);
- else //调用时返回false
- printf("Assign(t,x,2,5)=>参数错误\n");
- Value(t,y,2,5);
- printf("执行Value(t,10,2,5)\n");
- if (Assign(t,x,2,5)==true) //调用时返回true
- printf("Assign(t,x,2,5)=>x=%d\n",x);
- else //调用时返回false
- printf("Assign(t,x,2,5)=>参数错误\n");
- printf("b:\n");
- DispMat(t);
- TranTat(t,tb);
- printf("矩阵转置tb:\n");
- DispMat(tb);
- return 0;
- }
- 运行结果:
第九周 项目三--稀疏矩阵的三元组表示的实现及应用相关推荐
- 第九周项目三-人数不定的工资类
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月24日*版 本 号:v1. ...
- 第九周项目三:星星图案(一)
/* *copyright (c) 2014, 烟台大学计算机学院. *All rights reserved. *文件名称:test.cpp *作者:陆云杰 *完成日期:2014年10月23日 *版 ...
- 第七周项目三-用多文件组织多个类的程序
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月13日*版 本 号:v1. ...
- 第九周项目二时间类的重载<<与>>,一目。
/* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 作 者: * 完成日期:2014 年4 月22 日 * 版 本 号:v1.0 * ...
- 第八周实践项目8 稀疏矩阵的三元组表示的实现及应用
#include <stdio.h> #define M 6 #define N 7 #define MaxSize 100 //矩阵中非零元素最多个数 typedef int ElemT ...
- 第五周项目三-时间类(2)
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年3月29日 *版 本 ...
- 数据结构上机实践第九周项目3 - 利用二叉树遍历思想解决问题
利用二叉树遍历思想解决问题 学以致用,知行合一,学了知识就要会运用,否则跟背课文没什么区别,上次实践,做了二叉树递归遍历的算法实现,本次实践,将利用遍历思想解决问题,将遍历思想真正的运用到实际问题需求 ...
- 第十五周 项目三 归并排序算法的改进
/* * Copyright (c)2017,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目3.cpp * 作 者:孙仁圆 * 完成日期:2017年12 ...
- 第九周项目1——猴子选大王(数组版)
/* * Copyright (c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:wu.cpp * 作 者:武昊 * 完成日期:2016年1 ...
- 第十三周项目三-形状类族中的纯虚函数
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...
最新文章
- mysql数据类型总结
- 重新精读《Java 编程思想》系列之final关键字
- Android studio怎么配置javadoc生成项目API
- Spring3.1.0+Quartz1.8.6整合实现计划任务
- 深度优先搜索及广度优先搜索
- 在 Win10 中配置 Linux 开发环境
- mongodbVUE基本操作(转)
- java9模块不可见问题
- 一文看懂搜狗招股书:90次提到AI,王小川持股5%,净利3.7亿
- MFC下debug改成release版本出现问题及解决办法
- 编程语言-Ruby-问题整理
- linux线程组和进程区别,Linux中进程和线程之间的区别
- 为什么我的Linux主机内存用的那么快?
- 关于做ceb转换cebx遇到的问题及解决方案总结
- 阿里云发布智慧书店解决方案 联手新华书店总店落地首个“城市书房”
- PCB线宽与电阻的计算
- 2021 App上架到 各应用商店(应用宝,华为,vivo,小米,AppStore)
- 转:信息部是管理部门or服务部门?这些CIO在群里“吵” 起来了
- css段落首行缩进,文字间距
- ESP32-C3 学习测试 蓝牙 篇(五、添加 characteristic)