🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
~~~ #include<stdio.h> #include<windows.h> #define m 3 //行数 #define n 2 //列数 #define maxsize 50 typedef int elemtype; typedef struct  { int r; int c; elemtype d; }tupnode; typedef struct  { int rows; int cols; int nums; tupnode data[maxsize]; }tsmatrix; void creatmat(tsmatrix &t,elemtype a[m][n]) //稀疏矩阵创建三元组表示 { int i,j; t.rows=m;t.cols=n;t.nums=0; for(i=0;i<m;i++) { for(j=0;j<n;j++) if(a[i][j]!=0) { t.data[t.nums].r=i; t.data[t.nums].c=j; t.data[t.nums].d=a[i][j]; t.nums++; } } } int value(tsmatrix &t,elemtype x,int i,int j) //三元组元素赋值 { int k=0,k1; if(i>=t.rows||j>=t.cols) return 0; while(k<t.nums&&i>t.data[k].r) k++; while (k<t.nums&&i==t.data[k].r&&j>t.data[k].c) k++; if(t.data[k].r==i&&t.data[k].c==j) t.data[k].d=x; else { for(k1=t.nums-1;k1>=k;k1--) { t.data[k1+1].r=t.data[k1].r; t.data[k1+1].c=t.data[k1].c; t.data[k1+1].d=t.data[k1].d; } t.data[k].r=i; t.data[k].c=j; t.data[k].d=x; t.nums++; } return 1; } int assign(tsmatrix t,elemtype &x,int i,int j) //将指定位置的元素值赋给变量 { int k=0; if(i>=t.rows||j>=t.cols) return 0; while (k<t.nums&&i>t.data[k].r) k++; while (k<t.nums&&i==t.data[k].r&&j>t.data[k].c) k++; if(t.data[k].r==i&&t.data[k].c==j) x=t.data[k].d; else x=0; return 1; } void dispmat(tsmatrix t) //输出三元组 { int i; if(t.nums<=0) return; printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums); printf("\t------------------\n"); for(i=0;i<t.nums;i++) printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d); } void trantat(tsmatrix t,tsmatrix &tb) //矩阵转置 { int p,q=0,v; tb.rows=t.cols; tb.cols=t.rows; tb.nums=t.nums; if(t.nums!=0) { for(v=0;v<t.cols;v++) for(p=0;p<t.nums;p++) if(t.data[p].c==v) { tb.data[q].r=t.data[p].c; tb.data[p].c=t.data[p].r; tb.data[q].d=t.data[p].d; q++; } } printf("转置后的三元组为:\n"); dispmat(tb); } void main() { tsmatrix t,tb; elemtype a[3][2],x; int i,j,w,g,h; printf(" *************欢迎使用稀疏矩阵基本运算系统****************\n"); printf("请输入%d个数\n",m*n); for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); creatmat(t,a); while(1) { printf("请选择:"); printf("1 三元组元素赋值\n"); printf(" 2 将指定位置的元素值赋给变量\n"); printf(" 3 矩阵转置\n"); printf(" 4 输出三元组\n"); printf(" 5 退出\n"); scanf("%d",&w); switch(w) { case 1:printf("请输入所赋值:"); scanf("%d",&x); printf("\n请输入插入第几行:"); scanf("%d",&g); printf("\n请输入插入第几列:"); scanf("%d",&h); if(value(t,x,g,h)) printf("赋值成功\n"); else printf("赋值失败\n"); break; case 2:printf("\n请需取元素所在行:"); scanf("%d",&g); printf("\n请输入需取元素所在列:"); scanf("%d",&h); if(assign(t,x,g,h)) printf("取值成功,元素为:%d\n",x); else printf("取值失败\n"); break; case 3:trantat(t,tb);break; case 4:dispmat(t);break; case 5:exit(0); default:printf("输入错误!\n"); } } } ~~~