现在的位置: 首页 > 综合 > 正文

第5章 数组和广义表——矩阵的转置

2013年10月11日 ⁄ 综合 ⁄ 共 1288字 ⁄ 字号 评论关闭

         一开始就算Debug也找不出错,可是最后也是自己改好实现了。+1!

        

/*
 *    这个程序用三元表顺序存储来表示稀疏矩阵,
 *    并且将这个矩阵转置。
 */
#include<stdio.h> /*稀疏矩阵的三元组顺序存储表示*/
#define MAXSIZE  100
typedef struct triple{
	int i,j,e;
}triple;
typedef struct matrix{
	triple data[MAXSIZE+1];
	int mu,nu,tu;
}matrix;
matrix transpose(matrix M,matrix T){ /*采用三元组存储表示,*/
	int q,p,col;
	T.mu = M.nu = 4;              /*求稀疏矩阵 M 的转置矩阵 T 。*/
	T.nu = M.mu = 5;
	T.tu = M.tu = 5;
	if(T.tu!=0){
		q = 0;
		for(col = 0;col<=M.nu-1;col++){
			for(p = 0;p<=M.tu-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 T;
}
int input(int a[5][4]){ /*输入一个5行5列的矩阵*/
	int i,j;
	for(i = 0;i<=4;i++){
		for(j = 0;j<=3;j++){
			scanf("%d",&a[i][j]);
		}
	}
	return 0;
}
matrix store(int a[5][4],matrix M){ /*将稀疏矩阵中的非 0 元素存储进三元表*/
	int i,j,k;
	M.mu = 5;
	M.nu = 4;
	k = 0;
	for(i = 0;i<=4;i++)
		for(j = 0;j<=3;j++)
			if(a[i][j]!=0){
				M.data[k].i = i;
				M.data[k].j = j;
				M.data[k].e = a[i][j];
				k++;
			}
			return M;
}
int print(matrix T,int b[4][5]){ /*把矩阵 T 输出*/
	int i,j,p;
	T.mu = 4;
	T.nu = 5;
	T.tu = 5;
	for(i = 0;i<=T.mu-1;i++){
		for(j = 0;j<=T.nu-1;j++){
			b[i][j] = 0;
			for(p = 0;p<=T.tu-1;p++){
				if(T.data[p].i==i&&T.data[p].j==j)
					b[i][j] = T.data[p].e;
			}
			printf("%3d",b[i][j]);
		}
		printf("\n");
	}
	return 0;
}
int main(){
	int a[5][4],b[4][5];
	matrix A,B;
	input(a);
	A = store(a,A); /*一开始错在并没有把矩阵传出,下面的函数也是一样*/
	B = transpose(A,B); /*只是还不知道为什么要这样*/
	print(B,b);
	return 0;
}
/*
 *    测试案例:
 *    输入:
 *
 *         0 0 1 0 
 *         0 0 2 0
 *         0 0 3 0 
 *         0 0 4 0 
 *         0 0 5 0
 *
 *    输出:
 *         0 0 0 0 0
 *         0 0 0 0 0
 *         1 2 3 4 5
 *         0 0 0 0 0
 */

 

 

抱歉!评论已关闭.