用三元组表存储表示,求稀疏矩阵M转置函数T

实验目的

采用三元组表存储表示,求稀疏矩阵M转置函数T

实验内容

编程序并上机调试运行。

采用三元组表存储表示,求稀疏矩阵M转置函数T

编写程序

//采用三元组表存储表示,求稀疏矩阵M转置函数T

#include

#define MAXSIZE 100

typedef struct

{

int i,j;

int e;

}Triple;

typedef struct

{

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

//创建稀疏矩阵M

CreateSMatrix(TSMatrix *M)

{

int i,m,n,e,k;

printf(

scanf(

(*M).data[0].i=0;

printf(

for(i=1;i

{

do

{

printf(

scanf(

k=0;

if(m(*M).mu||n(*M).nu)

k=1;

if(m

k=1;

}while(k);

(*M).data[i].i=m;

(*M).data[i].j=n;

(*M).data[i].e=e;

}

printf(

return 1;

}

//输出稀疏矩阵M

void PrintSMatrix(TSMatrix M)

{

int i;

printf(

for(i=1;i

printf(

printf(

printf(

}

//求稀疏矩阵M的转置矩阵T

void TransposeSMatrix(TSMatrix M,TSMatrix *T)

{

int p,q,col;

(*T).mu=M.nu;

(*T).nu=M.mu;

(*T).tu=M.tu;

if((*T).tu)

{

q=1;

for(col=1;col

for(p=1;p

if(M.data[p].j==col)

{ (*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 1;

}

//打印矩阵函数,以通常形式输出矩阵

void print(TSMatrix A)

{

int k=1,a,b;

int M[MAXSIZE][MAXSIZE];

printf(

printf(

for(a=0;a

{

for(b=0;b

M[a][b]=0;

}

while(k

{

M[A.data[k].i-1][A.data[k].j-1]=A.data[k].e;

k++;

}

for(a=0;a

{

printf(

for(b=0;b

printf(

printf(

}

printf(

printf(

}

//主函数

int main()

{

TSMatrix M,T;

printf(

CreateSMatrix(&M);

printf(

PrintSMatrix(M);

print(M);

TransposeSMatrix(M,&T);

printf(

PrintSMatrix(T);

print(T);

printf(

getchar();

return 0;

}

运行程序:

程序解析:

1.首先是将程序的开头写好,定义非零元个数最多为

100.

定义非零元的行下标,列下标,和非零元素为int型。由mu,nu,tu分别代表矩阵的行数,列数和非零元个数。

2.创建稀疏矩阵M。

创建一个稀疏矩阵,用scanf进行用户输入行数,列数及非零元个数。当i小于等于非零元个数时,进行以下的for循环,执行内循环的循环语句。当k不为0时,重复执行输入非零元素的行列值以及其值,若超出行数或列数或非零元个数,则跳出循环。加入外循环,执行外循环的三个语句,直到,i等于非零个数,跳出外循环。

3.输出稀疏矩阵

M

用PrintSMatrix函数输出稀疏矩阵,从i等于1循环执行到i等于非零元个数,使非零元的行列数一个一个输出。

4.求稀疏矩阵的转置矩阵。

用TransposeSMatrix函数实现稀疏矩阵M转置为矩阵T。让T的行等于M的列,T的列等于M的行。非零元素相等。当非零元素不等于零时,就执行if语句,if语句中两个for循环和一个if循环实现了MT矩阵行列的对调,按列序求转置。最后返回1.

5.打印函数,输出非零元素对应的位置

这里定义一个M的数组,当a小于行数数,执行内循环,使b的列数不断增加,赋值为0,在执行外循环,b变为1,执行内循环,在赋值为0,然后再跳出内循环,执行外循环,如此直到,a等于行数则跳出外循环。执行下面的while语句。当k

6.建立main函数。

Main函数直接调用各个函数,在M的后面打印出其普通排列,T后面也打印出其普通排列。

实验目的

采用三元组表存储表示,求稀疏矩阵M转置函数T

实验内容

编程序并上机调试运行。

采用三元组表存储表示,求稀疏矩阵M转置函数T

编写程序

//采用三元组表存储表示,求稀疏矩阵M转置函数T

#include

#define MAXSIZE 100

typedef struct

{

int i,j;

int e;

}Triple;

typedef struct

{

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

//创建稀疏矩阵M

CreateSMatrix(TSMatrix *M)

{

int i,m,n,e,k;

printf(

scanf(

(*M).data[0].i=0;

printf(

for(i=1;i

{

do

{

printf(

scanf(

k=0;

if(m(*M).mu||n(*M).nu)

k=1;

if(m

k=1;

}while(k);

(*M).data[i].i=m;

(*M).data[i].j=n;

(*M).data[i].e=e;

}

printf(

return 1;

}

//输出稀疏矩阵M

void PrintSMatrix(TSMatrix M)

{

int i;

printf(

for(i=1;i

printf(

printf(

printf(

}

//求稀疏矩阵M的转置矩阵T

void TransposeSMatrix(TSMatrix M,TSMatrix *T)

{

int p,q,col;

(*T).mu=M.nu;

(*T).nu=M.mu;

(*T).tu=M.tu;

if((*T).tu)

{

q=1;

for(col=1;col

for(p=1;p

if(M.data[p].j==col)

{ (*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 1;

}

//打印矩阵函数,以通常形式输出矩阵

void print(TSMatrix A)

{

int k=1,a,b;

int M[MAXSIZE][MAXSIZE];

printf(

printf(

for(a=0;a

{

for(b=0;b

M[a][b]=0;

}

while(k

{

M[A.data[k].i-1][A.data[k].j-1]=A.data[k].e;

k++;

}

for(a=0;a

{

printf(

for(b=0;b

printf(

printf(

}

printf(

printf(

}

//主函数

int main()

{

TSMatrix M,T;

printf(

CreateSMatrix(&M);

printf(

PrintSMatrix(M);

print(M);

TransposeSMatrix(M,&T);

printf(

PrintSMatrix(T);

print(T);

printf(

getchar();

return 0;

}

运行程序:

程序解析:

1.首先是将程序的开头写好,定义非零元个数最多为

100.

定义非零元的行下标,列下标,和非零元素为int型。由mu,nu,tu分别代表矩阵的行数,列数和非零元个数。

2.创建稀疏矩阵M。

创建一个稀疏矩阵,用scanf进行用户输入行数,列数及非零元个数。当i小于等于非零元个数时,进行以下的for循环,执行内循环的循环语句。当k不为0时,重复执行输入非零元素的行列值以及其值,若超出行数或列数或非零元个数,则跳出循环。加入外循环,执行外循环的三个语句,直到,i等于非零个数,跳出外循环。

3.输出稀疏矩阵

M

用PrintSMatrix函数输出稀疏矩阵,从i等于1循环执行到i等于非零元个数,使非零元的行列数一个一个输出。

4.求稀疏矩阵的转置矩阵。

用TransposeSMatrix函数实现稀疏矩阵M转置为矩阵T。让T的行等于M的列,T的列等于M的行。非零元素相等。当非零元素不等于零时,就执行if语句,if语句中两个for循环和一个if循环实现了MT矩阵行列的对调,按列序求转置。最后返回1.

5.打印函数,输出非零元素对应的位置

这里定义一个M的数组,当a小于行数数,执行内循环,使b的列数不断增加,赋值为0,在执行外循环,b变为1,执行内循环,在赋值为0,然后再跳出内循环,执行外循环,如此直到,a等于行数则跳出外循环。执行下面的while语句。当k

6.建立main函数。

Main函数直接调用各个函数,在M的后面打印出其普通排列,T后面也打印出其普通排列。


相关文章

  • 数据结构课程设计(稀疏矩阵运算器)
  • *****大学 数据结构课程设计说明书 题 目:稀疏矩阵运算器学生姓名:学 号:专 业:班 级:指导教师: 2013 年 7 月 24日 稀疏矩阵运算器 摘 要 摘要:设计一稀疏矩阵运算器.实现两个矩阵的相加.相减和相乘的功能.用" ...查看


  • 数据结构----稀疏矩阵运算器课程设计
  • 内蒙古科技大学 数据结构课程设计说明书 题 目:稀疏矩阵运算器设计 学生姓名: 学 号: 专 业:计算机科学与技术 班 级:计09-1班 指导教师:刘 月 峰 2011 年 6 月 24 日 稀疏矩阵运算器设计 摘 要 摘要:设计一稀疏矩阵 ...查看


  • 稀疏矩阵运算器
  • 实验报告 题目:稀疏矩阵运算器 班级:08网络(4)班 姓名:吴文杰 学号:3108001375 完成日期:2010.07.04 一.需求分析  1.按照压缩存储的概念,只存储稀疏矩阵的非零元,以两个三元组{i,j,e}来表示 矩阵的非零 ...查看


  • 2016年中国人民银行招聘考试计算机数据结构基础知识(二)
  • 2016年中国人民银行招聘考试计算机数据结构基础知识(二) 为了帮助考生顺利通过2016年人民银行招聘考试,融大教育•银行人为大家做出相关备考指导,更多银行招聘考试信息请关注融大网校. * 21.链栈:采用链式存储结构的栈,称为链栈. * ...查看


  • 数据结构C语言版-稀疏矩阵的三元组顺序表存储表示和实现
  • typedef int ElemType; // 稀疏矩阵的三元组顺序表存储表示 #define MAXSIZE 100 // 非零元个数的最大值 typedef struct { int i,j; // 行下标,列下标 ElemType ...查看


  • 南开大学 数据结构Week8 矩阵与列表
  • 在科学与工程计算问题中,矩阵是一种常用的数学对象,在高级语言编程时,通常将一个矩阵描述为一个二维数组.这样,可以对其元素进行随机存取,各种矩阵运算也非常简单. 对于高阶矩阵,若其中非零元素呈某种规律分布或者矩阵中有大量的零元素,若仍然用常规 ...查看


  • 06年下半年程序员考试试题.s
  • 本文由筷子17贡献 doc文档可能在WAP端浏览体验不佳.建议您优先选择TXT,或下载源文件到本机查看. 2006 年下半年程序员上午试卷 (考试时间 9 : 00-11 : 30 共 150 分钟) 请按下述要求正确填写答题卡 1. 在答 ...查看


  • 数据结构三元组完成版
  • #include #include typedef int ElemType; // 稀疏矩阵的三元组顺序表存储表示 #define MAXSIZE 100 // 非零元个数的最大值 typedef struct { int i,j; // ...查看


  • 大规模稀疏矩阵PARD解方法介绍
  • 高性能计算 13 大规模稀疏矩阵PARDISO求解方法介绍 于 超 英特尔亚太研发中心 上海 200241 chao.yu@intel.com 摘要: 大规模稀疏矩阵的求解是高性能计算中的一个常见问题.本文介绍了用直接法(Direct Sp ...查看


热门内容