系列文章
实验3.多维数组的存储及操作
一、实验目的
1.掌握稀疏矩阵的三元组存储方法。
2.用C语言完成算法和程序设计并上机调试通过;
3.撰写实验报告,给出算法思路或流程图和具体实现(源程序)、算法分析结果(包括时间复杂度、空间复杂度以及算法优化设想)、输入数据及程序运行结果(必要时给出多种可能的输入数据和运行结果)。
二、实验要求
1、程序要求包含头文件以及main函数
2、实验中所设计的函数(算法)需要满足实验的要求
3、程序的编译、运行要成功通过
4、运行的结果正确,且有相应的提示
三、实验环境
WIND7、WIND10、VC++6.0或DEV C++
四、实验内容
在稀疏矩阵的三元组存储结构上实现矩阵转置操作。
五、源代码及算法分析
1.源代码
代码如下(示例):
#include<stdio.h>
#include<string.h>
#define MAXSIZE 100
#define OK 1
typedef struct
{
int i, j;
int e;
}tupletype;
typedef struct
{
tupletype data[MAXSIZE];
int rownum;
int colnum;
int nznum;
}Table;
void InitSPNode(Table* M) //输入三元组表
{
int i, j, k, val, maxrow, maxcol;
maxrow = 0;
maxcol = 0;
i = j = 0;
k = 0;
while (i != -1 && j != -1) //两个其中一个等于-1结束输入
{
printf("输入(行 列 值):");
scanf_s("%d %d %d", &i, &j, &val);
M->data[k].i = i;
M->data[k].j = j;
M->data[k].e = val;
if (maxrow < i)maxrow = i;
if (maxcol < j)maxcol = j;
k++;
}
M->rownum = maxrow; M->colnum = maxcol; M->nznum = k - 1;
}
void print(Table* M)
/*按矩阵格式输出以压缩方式存储的稀疏矩阵*/
{
int p, q;
int t = 0;
for (p = 0; p <= M->rownum; p++)
{
for (q = 0; q <= M->colnum; q++)
{
if (M->data[t].i == p && M->data[t].j == q)
{
printf("%d ", M->data[t].e);
t++;
}
else printf("0");
}
printf("\n");
}
}
void Trans1(Table* M, Table* T)
{
int q, col, p;
T->rownum = M->colnum; T->colnum = M->rownum; T->nznum = M->nznum;
if (T->nznum)
{
q = 0;
for (col = 0; col <= M->colnum; ++col) //按a的列序转置
for (p = 0; p < M->nznum; ++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;
}
}
}
int main()
{
Table A, B;
printf("\n 结束请输入(-1,-1,-1)\n");
InitSPNode(&A);
printf("输入矩阵为:\n");
print(&A); //转置前
Trans1(&A, &B);
printf("输出矩阵为:\n");
print(&B);
}
六、运行测试
总结
以上就是今天要讲的内容,如果觉得对你有用,给文章点个赞或收藏再走吧,感谢您的观看