VC++根据向量处理的程序:实现矩阵转置(高手赐教)

用单向链表表示n*n矩阵 其中n为用户可输入的任意数 并用程序实现n*n矩阵的(A+B)T=(A)T+(B)T将所有的函数与相应的数据封装到类中 并改写主程序 使之简化 (要实现转置则按一定的算法改变链表中节点的次序)

第1个回答  2013-11-10
矩阵运算感觉用二维数组比较方便,如果非要用链表的话,也可以用二维数组转一下,给出个人的建议供参考吧
1、创建两个n*n的链表,分别存放A和B的数据,链表的结构中包含行号、列号和元素值,至于链表的初始化就不赘述了。
2、创建一个n*n的二维数组C,如果n是固定就直接定义数组,n可变就用new或者malloc吧。
3、对A、B两个矩阵链表做一个从头到尾的遍历,读出每个元素的行号row和列号range(貌似是这两个单词?),还有数值value
把MatrixAij和MartrixBij的值分别加到数组Cji中,这样就实现转置了。
4、返回值,看你需要返回成什么样,如果可以返回数组的话,就把二维数组C直接返回吧(但如果是new/malloc出来的要记得delete/free)。
如果还要返回一个链表的话就再来一个n*n的循环,把数组C的每个元素写到链表中,记得行号和列号也要同步写进去,写完了就返回吧。电脑键盘坏了,空格和方框还有分号都不能敲,没有给出程序,见谅。
如果周日都没人给程序的话,我再写一份吧。
第2个回答  2013-11-10
#include<stdio.h>
void main()
{
int i,j;
int a[3][3],b[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++){
printf("the value a[%d][%d]",i+1,j+1);
scanf("%d",&a[i][j]);
}
/* transfer the matrix a[i][j] */
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
b[i][j]=a[j][i];
}
printf("/////////////////////\n");
printf("the original matrix:\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("/////////////////////\n");
printf("the transferd matrix:\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%3d",b[i][j]);
printf("\n");
}}
相似回答
大家正在搜