用三元组表存储表示,求稀疏矩阵M转置函数T
更新时间:2024-06-08 17:55:01 阅读量: 综合文库 文档下载
实验目的
采用三元组表存储表示,求稀疏矩阵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(\输入矩阵M的行数、列数、非零元的个数(中间用逗号隔开):\ scanf(\ (*M).data[0].i=0; printf(\ for(i=1;i<=(*M).tu;i++) {
do { printf(\输入第%d个非零元素所在的行(1~%d)列(1~%d)值以及该数值:\
scanf(\ k=0; if(m<1||m>(*M).mu||n<1||n>(*M).nu) k=1; if(m<(*M).data[i-1].i||m==(*M).data[i-1].i&&n<(*M).data[i-1].j) 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<=M.tu;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<=M.nu;++col)
for(p=1;p<=M.tu;++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(\非零元素所对应的位置:\\n\
printf(\ for(a=0;a
printf(\ printf(\}
//主函数 int main() {
TSMatrix M,T; printf(\创建矩阵M:\ CreateSMatrix(&M); printf(\矩阵M的三元组表为:\\n\ PrintSMatrix(M); print(M); TransposeSMatrix(M,&T); printf(\稀疏矩阵M的转换矩阵T的三元组表为:\\n\ 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<=A的非零元个数时,将非零元素放置到指定的位置。然后跳出循环执行下面的for语句,结果就可以输出链表状的非零元素。
6.建立main函数。
Main函数直接调用各个函数,在M的后面打印出其普通排列,T后面也打印出其普通排列。
正在阅读:
财务管理案例分析06-06
胚胎干细胞的特点及应用前景01-10
高铁肌红蛋白04-14
Why are massive O-rich AGB stars in our Galaxy not S-stars05-19
中央电大中级财务会计一历年试卷及答案06-10
七年级历史上册知识点整理105-17
寒假实习报告精彩3篇03-26
AIX安全加固操作手册04-14
软件产品登记测试报告12-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 三元
- 稀疏
- 矩阵
- 函数
- 存储
- 表示
- 南师GIS考研 - C语言试卷09
- 桥口区示范街(店)建设推进实施细则
- 高一语文《氓》说课稿
- 采薇·小雅与豳风·东山异同点分析
- 2015春节给客户的新年祝福语短信
- 基于PLC 的中央空调控制系统设计2012届本科毕业论文
- 教你污汁的去除方法 - hufu
- 广东省七校联合体2019届高三第二次(12月)联考数学理试题
- 武汉理工大学华夏学院EDA复习题答案
- Photoshop题库
- 《通信网络基础》期末复习提纲2(含答案)
- 办公家具投标书 - 图文
- 知恩
- 第一季度党建工作汇报材料
- 邢台电容器厂家直销各类电容器 - 图文
- 电工实验指导2012
- 2015-2020年中国移动安全行业市场分析与发展趋势研究报告 - 图文
- 政治经济学模拟试题及答案1
- 四年级三位数乘二位数竖式计算
- 2019年高考数学(文)原创押题预测卷 01(新课标Ⅱ卷)(考试版)