三对角矩阵压缩存储 转置

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

实验题目:

实验八——矩阵实验

程序设计2

问题分析:

1、题目要求:设计算法求三对角矩阵在压缩存储下的转置矩阵

2、设计思路:定义一种新的数据结构三元组用来存放数据,该数据结构为以一维数组,结点包括三个量i、j、v,i、j分别用来记录矩阵中元素的下标,v用来记录元素值,这样交换时,仅对下标交换即可达到转置矩阵的目的

3、输入与输出:只需输入三对角矩阵中所有非零元素的值,存放在三元组里,输出时,程序自动在没有数字元素处补零,以矩阵形式输出;

4、转置:调用转置函数进行转置,转置时仅交换数据的下标

5、测试数据:A、输入矩阵阶数:4

输入第一行的两个元素:1 2

输入第二、三行的元素,各三个:

4 5 6

7 8 9

输入最后一行的两个元素:3 8

预测结果:

原矩阵:转置后矩阵:

1 2 0 0 1 4 0 0

4 5 6 0 2 5 7 0

0 7 8 9 0 6 8 3

0 0 3 8 0 0 9 8

B、输入矩阵阶数:5

输入第一行的两个元素:12 45

输入第二、三行的元素,各三个:

77 88 99

44 55 66

11 22 33

输入最后一行的两个元素:14 82

预测结果:

原矩阵:转置后矩阵:

12 45 0 0 0 12 77 0 0 0

77 88 99 0 0 45 88 44 0 0

0 44 55 66 0 0 99 55 11 0

0 0 11 22 33 0 0 66 22 14

0 0 0 14 82 0 0 0 33 82

概要设计:

1、为了实现上述程序功能,需定义三元组数据结构用来存储数据,建立三元组输入函数,输出函数和矩阵转置函数,最后在屏幕上输出结果;

2、本程序包含4个函数:

⑴主函数main()

⑵三对焦矩阵建立函数Setmatrix()

⑶转置函数Trabsmatrix()

⑷输出函数Tsmatrixout()

各函数关系如下:

详细设计:

1、数据结构与结点类型:

typedef struct //定义结点类型

{

int i,j,v;

}node;

typedef struct //定义矩阵类型

{

node data[max];

int m;

}TSmatrix;

2、各函数的基本操作

⑴三对角矩阵的建立函数

TSmatrix *Setmatrix(){

申请空间;

输入第一行的两个元素;

输入2~n-1行的元素,每行3个;

返回;

}

⑵转置函数

TSmatrix *Trabsmatrix(TSmatrix *T){

建立新的三元组;

把原三元组数据下标交换,放入新组;

返回新三元组;

}

⑶输出函数

void TSmatrixout(TSmatrix *T){

定义变量a 、b=0;

如果三元表中数据下表等于a 、b 的值,则输出该元素;

否则,输出0;

a++’;b++;

}

main() Setmatrix() Trabsmatrix() Tsmatrixout()

源代码:

#include

#include

#define max 20

typedef struct //定义结点类型

{

int i,j,v;

}node;

typedef struct //定义矩阵类型

{

node data[max];

int m;

}TSmatrix;

TSmatrix *Setmatrix() //建立三对角矩阵

{

TSmatrix *T;

T=(TSmatrix *)malloc(sizeof(TSmatrix));

printf("请输入矩阵阶数:");

scanf("%d",&T->m);

printf("建立三对角矩阵:\n");

printf("输入第一行的两个数:\n"); //第一行只有两个元素,单独输入 scanf("%d %d",&T->data[0].v,&T->data[1].v);

T->data[0].i=0;

T->data[0].j=0;

T->data[1].i=0;

T->data[1].j=1;

printf("输入第二行至第%d行的数(每行3个):\n",T->m-1);

int t=2;

for(int p=1;pm-1;p++) //循环输入2~n-1行的元素,每行3个

for(int q=p-1;q

{

T->data[t].j=q;

T->data[t].i=p;

scanf("%d",&T->data[t].v);

t++;

}

printf("输入最后一行的两个数:\n"); //输入最后一行的两个元素

scanf("%d %d",&T->data[3*T->m-4].v,&T->data[3*T->m-3].v);

T->data[3*T->m-4].i=T->m-1;

T->data[3*T->m-4].j=T->m-2;

T->data[3*T->m-3].i=T->m-1;

T->data[3*T->m-3].j=T->m-1;

return T;

相关文档
最新文档