数据结构-稀疏矩阵-实验报告与代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.需求分析

输入要求:稀疏矩阵的行、列和非零元素个数

输出要求:稀疏矩阵的转置、加法、减法、乘法

二.算法设计

本程序中采用的数据模型,用到的抽象数据类型的定义,程序的主要算法流程及各模块之间的层次调用关系

1.抽象数据类型:

ADT List {

数据对象:D={ai:|ai∈ElemSet,i=1…n,n≥0}

数据关系:R={Row,Col}

Row={|1<=i<=m,1<=j<=n-1}

Col={|1<=i<=m-1,1<=j<=n}

基本操作:

Status CreateSMatrix(TSMatrix &M)

操作结果:初始化稀疏数组

void PrintSMatrix(TSMatrix M)

初始条件:稀疏数组M已经存在

操作结果:打印矩阵M

void DestroySMatrix(TSMatrix &M)

初始条件:稀疏数组M已经存在

操作结果:销毁矩阵M

void CopySMatrix(TSMatrix M, TSMatrix &T)

初始条件:稀疏数组M已经存在

操作结果:复制矩阵M到T

Status AddSMatrix(TSMatrix M, TSMatrix N, TSMatrix &Q)

初始条件:稀疏数组M、N已经存在

操作结果:求矩阵的和Q=M+N

Status SubSMatrix(TSMatrix M, TSMatrix N, TSMatrix &Q)

初始条件:稀疏数组M、N已经存在

操作结果:求矩阵的差Q=M-N

Status TransposeSMatrix(TSMatrix M, TSMatrix & T)

初始条件:稀疏数组M已经存在

操作结果:求矩阵M的转置T

Status MultSMatrix(TSMatrix M, TSMatrix N, TSMatrix &Q)

初始条件:稀疏数组M已经存在

操作结果:求矩阵的积Q=M*N

}ADT List

2. 本程序有二个模块:

(1)主程序模块

main()

{

初始化;

{

接受命令;

显示结果;

(2)三元组表单元模块:实现矩阵抽象数据类型。

三.程序设计

根据算法设计中给出的有关数据和算法,选定物理结构,详细设计需求分析中所要求的程序。包括:人机界面设计、主要功能的函数设计、函数之间调用关系描述等。

1、程序基本结构:

2、稀疏矩阵的三元组顺序表存储表示:

typedef struct { // 定义三元组的元素

int i, j;

int e;

} Triple;

typedef struct { // 定义普通三元组对象

Triple data[MAXSIZE + 1];

int mu, nu, tu;

} TSMatrix;

typedef struct { // 定义带链接信息的三元组对象Triple data[MAXSIZE + 2];

int rpos[MAXROW + 1];

int mu, nu, tu;

} RLSMatrix;

3、基本函数:

1)输入矩阵,按三元组格式输入

bool InPutTSMatrix(P & T, int y) {

cout << "输入矩阵的行,列和非零元素个数:" << endl;

cin >> T.mu >> T.nu >> T.tu;

cout << "请输出非零元素的位置和值:" << endl;

int k = 1;

for (; k <= T.tu; k++)

cin >> T.data[k].i >> T.data[k].j >> T.data[k].e;

return true;

}

2)输出矩阵,按标准格式输出

bool OutPutSMatrix(P T) {

int m, n, k = 1;

for (m = 0; m < T.mu; m++) {

for (n = 0; n < T.nu; n++) {

if ((T.data[k].i - 1) == m && (T.data[k].j - 1) == n) {

cout.width(4);

cout << T.data[k++].e;

} else {

cout.width(4);

cout << "0";

}

}

cout << endl;

}

return true;

}

3)求矩阵的转置矩阵

bool TransposeSMatrix() {

TSMatrix M, T; //定义预转置的矩阵

InPutTSMatrix(M, 0); //输入矩阵

int num[MAXROW + 1];

int cpot[MAXROW + 1]; //构建辅助数组

int q, p, t;

T.tu = M.tu;

T.mu = M.nu;

T.nu = M.mu;

if (T.tu) {

for (int col = 1; col <= M.nu; col++) num[col] = 0;

for (t = 1; t <= M.tu; t++) ++num[M.data[t].j];

cpot[1] = 1;

相关文档
最新文档