📄 6.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
typedef struct matnode{
int row,col;
struct matnode *right,*down;
union{
int val;
struct matnode *next;
}tag;
}Mtype;
Mtype *creaemat()
{
int m,n,t,s,i,r,c,v;
Mtype *h[100],*p,*q;
printf("行数m,列数n,非零元个数t:");
scanf("%d,%d,%d",&m,&n,&t);
p=(Mtype *)malloc(sizeof(Mtype));
h[0]=p;
p->row=m;
p->col=n;
s=m>n?m:n;
for(i=1;i<=s;i++)
{
p=(Mtype *)malloc(sizeof(Mtype));
h[i]=p;
h[i-1]->tag.next=p;
p->row=p->col=0;
p->down=p->right=p;
}
h[s]->tag.next=h[0];
for(i=1;i<=t;i++)
{
printf("\t 第%d个元数(行号r,列号c,值v):",i);
scanf("%d,%d,%d",&r,&c,&v);
p=(Mtype *)malloc(sizeof(Mtype));
p->row=r;
p->col=c;
p->tag.val=v;
q=h[r];
while(q->right!=h[r]&&q->right->col<c)
q=q->right;
p->right=q->right;
q->right=p;
q=h[c];
while(q->down!=h[c]&&q->down->row<r)
q=q->down;
p->down=q->down;
q->down=p;
}
return(h[0]);
}
void prmatrow(Mtype *hm)
{
Mtype *p,*q;
printf("row=%d col=%d\n",hm->row,hm->col);
p=hm->tag.next;
while(p!=hm)
{
q=p->right;
while(p!=q)
{
printf("\t%d,%d,%d\n",q->row,q->col,q->tag.val);
q=q->right;
}
p=p->tag.next;
}
}
Mtype *change(Mtype *hm)
{
Mtype *p,*q;
int t,w;
w=hm->row;
hm->row=hm->col;
hm->col=w;
p=hm->tag.next;
while(p!=hm)
{ q=p->right;
while(p!=q)
{
t=q->row;
q->row=q->col;
q->col=t;
q=q->right;
}
p=p->tag.next;
}
return hm;
}
void main()
{
Mtype *hm,*hm1;
hm=creaemat();
printf("\n 按行表输入矩阵:\n");
prmatrow(hm);
hm1=change(hm);
printf("\n 转阵后:");
printf("\n 按列表输入矩阵:\n");
prmatrow(hm1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -