稀疏矩阵的创建与相加

//本程序实现稀疏矩阵的创建与相加可在VS2008环境中运行 #include

#include

#define MAXSIZE 100//非零元素个数最大值为

#define OK 1

typedef int ElemType;//元素值的类型定义为int型 typedef int Status;

typedef struct{

int i,j;//该非零元素的行下标和列下标 ElemType e;//存储该非零元素的值

}Triple;

typedef struct{

Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用 int mu,nu,tu;//矩阵的行数、列数和非零元个数 }TSMatrix;

Status CreatSMatrix(TSMatrix &M)

{//创建稀疏矩阵M

}

Status comp(int c1,int c2)

{//比较行列的大小AddSMatrix函数将用到

if(c1MAXSIZE) {printf("非零元素个数太多请重新输入\n");exit(0);} M.data[0].i=0;//为下面比较顺序作准备 for(i=1;iM.mu||nM.nu)//行或列超出范围 {printf("行或列超出范围请重新输入\n");exit(0);} if(m

}

Status AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q) {//求稀疏矩阵的和Q=M+N

}

Status PrintSMatrix(TSMatrix &M)

{//输出稀疏矩阵M int m=1,n=1,q=0;//分别为矩阵M、N、Q的编号 if(M.mu!=N.mu||M.nu!=N.nu)//M、N两稀疏矩阵行或列数不同 {printf("不满足矩阵相加的条件请重新输入\n");exit(0);} Q.mu=M.mu;Q.nu=M.nu;//矩阵Q的行数和列数与矩阵M(矩阵N)相同 while(mMAXSIZE)//非零元素个数太多 {printf("非零元素个数太多请重新输入\n");exit(0);} return OK; switch(comp(M.data[m].i,N.data[n].i)){ } case -1: Q.data[++q]=M.data[m++];//将矩阵M的当前元素值赋给矩阵Q break; switch(comp(M.data[m].j,N.data[n].j)){ } break; Q.data[++q]=N.data[n++]; Q.data[++q]=M.data[m++]; break; Q.data[++q]=M.data[m++]; Q.data[q].e+=N.data[n++].e;//矩阵M、N当前元素求和并赋值给矩阵Q if(Q.data[q].e==0)//元素值为不存入压缩矩阵 q--; break; Q.data[++q]=N.data[n++];//将矩阵N当前元素赋值给矩阵Q case 0://M、N矩阵当前行元素相等继续比较 case -1: case 0://M、N矩阵当前非零元素的行列均相等 case 1: case 1:

}

int main() { } TSMatrix M,N,Q; printf("输入矩阵M\n"); CreatSMatrix(M);//创建矩阵M printf("输入矩阵N\n"); CreatSMatrix(N);//创建矩阵N AddSMatrix(M,N,Q);//M+N printf("输入矩阵M和N的和:\n"); PrintSMatrix(Q);//输出矩阵M+N的和矩阵Q return OK; printf("共%d行%d列%d个非零元素\n",M.mu,M.nu,M.tu); printf("行 列 元素值\n"); for(i=1;i

//本程序实现稀疏矩阵的创建与相加可在VS2008环境中运行 #include

#include

#define MAXSIZE 100//非零元素个数最大值为

#define OK 1

typedef int ElemType;//元素值的类型定义为int型 typedef int Status;

typedef struct{

int i,j;//该非零元素的行下标和列下标 ElemType e;//存储该非零元素的值

}Triple;

typedef struct{

Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用 int mu,nu,tu;//矩阵的行数、列数和非零元个数 }TSMatrix;

Status CreatSMatrix(TSMatrix &M)

{//创建稀疏矩阵M

}

Status comp(int c1,int c2)

{//比较行列的大小AddSMatrix函数将用到

if(c1MAXSIZE) {printf("非零元素个数太多请重新输入\n");exit(0);} M.data[0].i=0;//为下面比较顺序作准备 for(i=1;iM.mu||nM.nu)//行或列超出范围 {printf("行或列超出范围请重新输入\n");exit(0);} if(m

}

Status AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q) {//求稀疏矩阵的和Q=M+N

}

Status PrintSMatrix(TSMatrix &M)

{//输出稀疏矩阵M int m=1,n=1,q=0;//分别为矩阵M、N、Q的编号 if(M.mu!=N.mu||M.nu!=N.nu)//M、N两稀疏矩阵行或列数不同 {printf("不满足矩阵相加的条件请重新输入\n");exit(0);} Q.mu=M.mu;Q.nu=M.nu;//矩阵Q的行数和列数与矩阵M(矩阵N)相同 while(mMAXSIZE)//非零元素个数太多 {printf("非零元素个数太多请重新输入\n");exit(0);} return OK; switch(comp(M.data[m].i,N.data[n].i)){ } case -1: Q.data[++q]=M.data[m++];//将矩阵M的当前元素值赋给矩阵Q break; switch(comp(M.data[m].j,N.data[n].j)){ } break; Q.data[++q]=N.data[n++]; Q.data[++q]=M.data[m++]; break; Q.data[++q]=M.data[m++]; Q.data[q].e+=N.data[n++].e;//矩阵M、N当前元素求和并赋值给矩阵Q if(Q.data[q].e==0)//元素值为不存入压缩矩阵 q--; break; Q.data[++q]=N.data[n++];//将矩阵N当前元素赋值给矩阵Q case 0://M、N矩阵当前行元素相等继续比较 case -1: case 0://M、N矩阵当前非零元素的行列均相等 case 1: case 1:

}

int main() { } TSMatrix M,N,Q; printf("输入矩阵M\n"); CreatSMatrix(M);//创建矩阵M printf("输入矩阵N\n"); CreatSMatrix(N);//创建矩阵N AddSMatrix(M,N,Q);//M+N printf("输入矩阵M和N的和:\n"); PrintSMatrix(Q);//输出矩阵M+N的和矩阵Q return OK; printf("共%d行%d列%d个非零元素\n",M.mu,M.nu,M.tu); printf("行 列 元素值\n"); for(i=1;i


相关内容

  • 稀疏矩阵的运算
  • 数 据 结 构 课 程 设 计 稀疏矩阵的运算 学 生 姓 名: 学 号: 指 导 教 师: 完 成 日 期: 目录: 1.分析问题和确定解决方案 „„„„„„„„„„ 3 1.1问题描述 „„„„„„„„„„„ 3 1.2 输入的形式和输入值的范围 „„„„„„„„ 3 1.3 输出的形式 „„„ ...

  • 4.1稀疏矩阵运算器
  • 稀疏矩阵运算器 一.实验目的 使读者能深入研究数组的存储表示和实现技术 二.实验内容 [问题描述]稀疏矩阵是指那些多数元素为零的矩阵,利用"稀疏"特点进行存储和计算可以大大节省存储空间,提高计算效率.实现一个能进行稀疏矩阵基本运算的运算器. [基本要求]以"带行逻辑链接 ...

  • gCLUTO中文说明书
  • gCLUTO 使用说明书 Matt Rasmussen, Mark Newman 明尼苏达大学. 版权 2003 最后修改:CST 2003年 1月20日 星期一12:33:38 目 录 1 说明 ................................................... ...

  • [数据结构课程设计]课程设计方案
  • <算法与数据结构课程设计>方案 Course Design of Data Structure 适用专业:计算机科学与技术专业 本科 课程代码:B08233004 一.课程设计的性质和目的 软件设计能力培养对学生是很重要.通过数据结构的学习,使学生对软件编程能力有一定的提高.数据结构学习 ...

  • 第五章稀疏矩阵三元组表示
  • 注意: 程序:加法.乘法不调用. #include #include //稀疏矩阵的三元组顺序表存储表示 #define MAX_SIZE 12500 //假设非零元个数的最大值为12500 #define OK 1 #define ERROR 0 typedef int ElemType; typ ...

  • 稀疏矩阵三元组实现矩阵转置算法实验报告
  • 实验三 稀疏矩阵的三元组表示实现矩阵转置算法 学院 专业 班 学号 姓名 一.实习目的 1. 掌握稀疏矩阵的三元组顺序表存储表示: 2. 掌握稀疏矩阵三元组表示的传统转置算法的实现: 3. 掌握稀疏矩阵三元组表示的快速转置算法的实现: 二.实习内容 1. 稀疏矩阵的按三元组形式输入,即按行序输入非零 ...

  • 稀疏矩阵快速转置
  • 题目:假设稀疏矩阵A采用三元组表表示,编写程序实现该矩阵的快速转置 要求:输入一个稀疏矩阵A,由程序将其转换成三元组表存储:转置后的三元组 表,由程序将其转换成矩阵形式后输出. 二.概要设计 ⒈ 为实现上述算法,需要线性表的抽象数据类型: ADT SparseMatrix { 数据对象:D={aij ...

  • matlab常用命令汇总111111
  • 一.常用对象操作:除了一般windows窗口的常用功能键外. 1.!dir 可以查看当前工作目录的文件. !dir& 可以在dos状态下查看. 2.who 可以查看当前工作空间变量名, whos 可以查看变量名细节. 3.功能键: 功能键 快捷键 说明 方向上键 Ctrl+P 返回前一行输入 ...

  • 最小生成树数据结构实验报告
  • 摘 要 最小生成树是数据结构中图的一种重要应用,在图中对于n个顶点的连通网 可以建立许多不同的生成树,最小生成树就是在所有生成树中总的权值最小的生成树. 本课程设计是以邻接矩阵作为图的存储结构,分别采用Prim和Kruskal算法 求最小生成树.Kruskal算法和Prim算法是求最小生成树的常用算 ...