⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 稀疏矩阵 .txt

📁 你看了就知道是是数据结构的东西你形式啊还不多吗好多了啊。
💻 TXT
字号:
/*将稀疏矩阵表示为三元组,求出转置矩阵并输出结果。010650-20030000008000*/

#include<stdio.h>
#define Max 1000;
typedef int datatype;
typedef struct node{
 int i;   /*行*/
 int j;  /*列*/
 datatype k; /*元素*/
 }TripleNode;  /*三元组结点定义*/
typedef struct tn{
 TripleNode data[100];
 int m,n,t;
 }TripleTable;/*三元组表及非零元素个数t;m,n是表示稀疏矩阵的行列数 */
void TransMatrix(TripleTable *b,TripleTable *a)  /*将a转置为b*/
{
 int p,q,col;
 b->m=a->n; /*传递行列及个数信息。转置了?*/
 b->n=a->m;
 b->t=a->t;
 if(b->t==0)printf("Error!");
 q=0;
/*这一段复杂!!!*/
/*基本思想是将a->data表中以列为序扫描,将行列互换后依次放入b->data中,即可得到b的行优先排列*/
/*why?三元组表能不能直接把行列互换?不行,因为直接互换后不能保证行优先顺序!还可以用带行表的*/
/*三元组表快速置换,算法见<数据结构-powerpoint>课件中的*/
 for(col=0;col<a->n;col++)  
  for(p=0;p<a->t;p++)  
   if(a->data[p].j==col)
    {
    b->data[q].i=a->data[p].j;
    b->data[q].j=a->data[p].i;
    b->data[q].k=a->data[p].k;
    q++;
    }
}
TripleTable *CreateTranTri(int a[4][5])     /*将普通数组转为三元表组*/
{       TripleTable *x;
 int y=0;
 int i,j;
 x=(TripleTable *)malloc(sizeof(TripleTable));
/*按行优先扫描数组,如果不为0,则进入三元组表*/ 
       for(i=0;i<4;i++)
  for(j=0;j<5;j++)
   if(a[i][j]!=0)
    {
      x->data[y].i=i;
      x->data[y].j=j;
      x->data[y].k=a[i][j];
      y++;
        }
 x->m=i; /*相关信息也要过去,不然如何运算?*/
 x->n=j;
 x->t=y;
 return x;
    }
void DTT(TripleTable *q)  /*将三元组表写入数组*/
{
 int y,l;
 int m,n;
 int a[5][4];
/*初始*/for(m=0;m<5;m++)
  for(n=0;n<4;n++)
   a[m][n]=0;
/*注意理解!*/
 for(l=0;l<q->t;l++)
  for(y=0;y<q->t;y++)
   a[q->data[y].i][q->data[y].j]=q->data[y].k;
/*输出*/
 for(m=0;m<5;m++)
  for(n=0;n<4;n++)
     {
      printf("%d ",a[m][n]);
      if(n==3)printf("\n");
      }
 }
void main()
{
 int A[4][5]={0,5,0,0,8,1,0,3,0,0,0,-2,0,0,0,6,0,0,0,0};
 TripleTable *o,*p;
        p=(TripleTable *)malloc(sizeof(TripleTable));
 o=CreateTranTri(A);
 TransMatrix(p,o);
 DTT(p);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -