稀疏矩阵三元组的操作
来源:互联网 发布:php直播系统源码下载 编辑:程序博客网 时间:2024/05/23 21:05
稀疏矩阵三元组的操作:
#include <iostream>#include <conio.h>#include <iomanip>#include <windows.h>#include <cstdio>#include <algorithm>#define MAXSIZE 12500using namespace std;//假设非零元个数的最大值typedef int Elemtype;typedef struct{ int i, j,k; //该非零元的行列下标 Elemtype e;} Triple;typedef struct{ Triple data[MAXSIZE]; int mu, nu, tu; //矩阵的行、列数和非零元个数} TSMatrix;bool cmp(Triple n,Triple m){ if(n.i<m.i) return n.i<m.i; else return n.j<m.j;}//建立稀疏矩阵int create(TSMatrix &t){ int i,m,n; Elemtype e; cout<<"请输入稀疏矩阵的行数、列数、非零元素数(中间用空格隔开):"<<endl; cin>>t.mu>>t.nu>>t.tu; if(t.tu>MAXSIZE) return 0; for(i=0; i<t.tu; i++) { cout<<"按行序列顺序输入第"<<i<<"个非零元素所在的行(0-"<<t.mu<<"),列(0-"<<t.nu<<")"<<endl; cin>>m>>n>>e; t.data[i].i=m; t.data[i].j=n; t.data[i].e=e; } return 1;}//打印稀疏矩阵void print(TSMatrix m){ int k,x,y,n; cout<<"\n"; for(x=0; x<m.mu; x++) { for(y=0; y<m.nu; y++) { k=0; for(n=0; n<m.tu; n++) { if((m.data[n].i==x)&&(m.data[n].j==y)) { cout<<setw(5)<<m.data[n].e; k=1; } } if(k==0) cout<<setw(5)<<k; } cout<<"\n"; }}void transpose(TSMatrix m,TSMatrix &t){ t.nu=m.mu; t.mu=m.nu; t.tu=m.tu; int i,j,q; q=0; if(m.tu) { for(i=0; i<m.nu; i++) { for(j=0; j<m.tu; j++) { if(m.data[j].j==i) { t.data[q].i=m.data[j].j; t.data[q].j=m.data[j].i; t.data[q].e=m.data[j].e; q++; } } } }}void AddSMatrix(TSMatrix m,TSMatrix n,TSMatrix &t,TSMatrix &kk){ int i,j,k; k=0; TSMatrix kk1; int sum=0; int f=0; if(m.nu!=n.nu||m.mu!=n.mu) { printf("请输入行和列相同的矩阵"); return ; } for(i=0; i<m.tu; i++) { for(j=0; j<n.tu; j++) { if(m.data[i].i==n.data[j].i&&m.data[i].j==n.data[j].j) { t.data[k].i=m.data[i].i; t.data[k].j=m.data[i].j; t.data[k].e=m.data[i].e+n.data[j].e; k++; n.data[j].e=0; m.data[i].e=0; } } } for(i=0; i<m.tu; i++) { if(m.data[i].e!=0) { t.data[k].i=m.data[i].i; t.data[k].j=m.data[i].j; t.data[k].e=m.data[i].e; k++; } } for(i=0; i<n.tu; i++) { if(n.data[i].e!=0) { t.data[k].i=n.data[i].i; t.data[k].j=n.data[i].j; t.data[k].e=n.data[i].e; k++; } } t.nu=m.nu; t.mu=m.mu; t.tu=m.tu;// printf("%d\n",k);// for(i=0; i<k; i++)// {// printf("%d %d %d\n",t.data[i].i,t.data[i].j,t.data[i].e);// }// printf("\n"); int q=0; for(j=0; j<t.mu;j++) { for(i=0; i<k; i++) { if(t.data[i].i==j) { kk.data[q].i=t.data[i].i; kk.data[q].j=t.data[i].j; kk.data[q].e=t.data[i].e; q++; } } } kk.nu=m.nu; kk.mu=m.mu; kk.tu=q;// for(i=0; i<q ;i++)// {// printf("%d %d %d\n",kk.data[i].i,kk.data[i].j,kk.data[i].e);// }}void jianMatrix(TSMatrix m,TSMatrix n,TSMatrix &t,TSMatrix &kk){ int i,j,k; k=0; TSMatrix kk1; int sum=0; int f=0; if(m.nu!=n.nu||m.mu!=n.mu) { printf("请输入行和列相同的矩阵"); return ; } for(i=0; i<m.tu; i++) { for(j=0; j<n.tu; j++) { if(m.data[i].i==n.data[j].i&&m.data[i].j==n.data[j].j) { t.data[k].i=m.data[i].i; t.data[k].j=m.data[i].j; sum=m.data[i].e-n.data[j].e; t.data[k].e=sum; k++; n.data[j].e=0; m.data[i].e=0; } } } for(i=0; i<m.tu; i++) { if(m.data[i].e!=0) { t.data[k].i=m.data[i].i; t.data[k].j=m.data[i].j; t.data[k].e=m.data[i].e; k++; } } for(i=0; i<n.tu; i++) { if(n.data[i].e!=0) { t.data[k].i=n.data[i].i; t.data[k].j=n.data[i].j; t.data[k].e=n.data[i].e; k++; } } t.nu=m.nu; t.mu=m.mu; t.tu=m.tu;// printf("%d\n",k);// for(i=0; i<k; i++)// {// printf("%d %d %d\n",t.data[i].i,t.data[i].j,t.data[i].e);// }// printf("\n"); int q=0; for(j=0; j<t.mu;j++) { for(i=0; i<k; i++) { if(t.data[i].i==j) { kk.data[q].i=t.data[i].i; kk.data[q].j=t.data[i].j; kk.data[q].e=t.data[i].e; q++; } } } kk.nu=m.nu; kk.mu=m.mu; kk.tu=q;// for(i=0; i<q ;i++)// {// printf("%d %d %d\n",kk.data[i].i,kk.data[i].j,kk.data[i].e);// }}void fasttranspose(TSMatrix m,TSMatrix &t){ int num[1000],co[10000]; memset(num,sizeof(num),0); memset(co,sizeof(co),0); int i,j,k; t.nu=m.mu; t.mu=m.nu; t.tu=m.tu; if(m.tu) { for(i=0; i<m.tu; i++) { num[m.data[i].j]++; } co[0]=0; for(i=1; i<m.nu; i++) { co[i]=co[i-1]+num[i-1]; printf("%d\n",co[i]); } for(i=0; i<m.tu; i++) { k=m.data[i].j; j=co[k]; t.data[j].i=m.data[i].j; t.data[j].j=m.data[i].i; t.data[j].e=m.data[i].e; co[k]++; } }}char menuselect(void){ char ch; cout<<endl; cout<<" ***********************数组和广义表********************"<<endl; cout<<" * a:创建稀疏矩阵"<<"\t"<<"\t"<<"b:稀疏矩阵相加"<<"\t"<<"\t"<<"*"<<endl; cout<<" * c: 稀疏矩阵相减"<<"\t"<<"\t"<<"d:稀疏矩阵相乘"<<"\t"<<"\t"<<"*"<<endl; cout<<" * e:稀疏矩阵转置"<<"\t"<<"\t"<<"f:快速转置 "<<"\t"<<"\t"<<"*"<<endl; cout<<" * g:打印稀疏矩阵"<<"\t"<<"\t"<<"h: "<<"\t"<<"\t"<<"*"<<endl; cout<<" * i: "<<"\t"<<"\t"<<"\t"<<"j: "<<"\t"<<"\t"<<"*"<<endl; cout<<" * k: "<<"\t"<<"\t"<<"\t"<<"l: "<<"\t"<<"\t"<<"*"<<endl; cout<<" * w: "<<"\t"<<"\t"<<"\t"<<"x: "<<"\t"<<"\t"<<"*"<<endl; cout<<" * z:退出 "<<"\t"<<"\t"<<"x: "<<"\t"<<"\t"<<"*"<<endl; cout<<" *******************************************************"<<endl; cout<<" 请输入你的选择:"; cin>>ch; return ch;}void menu(void);TSMatrix m,n,q,s;void menu(void){ char menuselect(void); for(;;) { switch (menuselect()) { case 'a'://创建 create(m); break; case 'b'://相加 cout<<"输入矩阵M"<<endl; create(m);//创建矩阵M cout<<"输入矩阵N"<<endl; create(n);//创建矩阵N AddSMatrix(m,n,s,q);//M+N cout<<"输入矩阵M和N的和:"<<endl; print(q);//输出矩阵M+N的和矩阵Q break;case 'c'://相减 cout<<"输入矩阵M"<<endl; create(m);//创建矩阵M cout<<"输入矩阵N"<<endl; create(n);//创建矩阵N jianMatrix(m,n,s,q);//M+N cout<<"输入矩阵M和N的减"<<endl; print(q);//输出矩阵M+N的和矩阵Qbreak; case 'e'://转置 transpose(m,n); cout<<"转置后的稀疏矩阵为:"<<endl; print(n); break; case 'f'://快速转置 fasttranspose(m,n); cout<<"快速转置后的稀疏矩阵为:"<<endl; print(n); break; case 'g'://打印 cout<<"稀疏矩阵为:"<<endl; print(m); break; case 'z': cout<<" 再见! "<<endl; return; } }}int main(){ menu();}/*10 10 81 2 121 3 93 1 -33 6 144 3 245 2 186 1 156 4 -710 10 81 3 -31 6 152 1 122 5 183 1 93 4 244 6 -76 3 14*/
阅读全文
0 0
- 稀疏矩阵三元组的操作
- 稀疏矩阵的三元组
- 稀疏矩阵-三元组
- 稀疏矩阵的三元组存储结构
- 稀疏矩阵的转置用三元组表示
- 稀疏矩阵的三元组顺序存储
- 稀疏矩阵的三元组存储
- 稀疏矩阵的三元组表示
- 稀疏矩阵的三元组处理
- 稀疏矩阵的三元组存储算法
- 数据结构 数组操作 稀疏矩阵采用三元组存储,设计算法求两个矩阵的和。
- 三元组稀疏矩阵类
- 稀疏矩阵三元组存储
- _DataStructure_C_Impl:稀疏矩阵三元组
- 稀疏矩阵三元组转化
- C语言 稀疏矩阵操作(三元组表示法)
- 数据结构——稀疏矩阵三元组操作
- 三元组表示矩阵,以及稀疏矩阵的转置
- Java递归实现整数各位求和
- HDU
- docker:搭建单机redis主从集群
- C语言之贪心算法(背包问题)
- codeforces 864C Marco and GCD Sequence
- 稀疏矩阵三元组的操作
- Redis开发实例(3)-List
- 二叉树,完全二叉树,满二叉树,平衡二叉树的区别
- jsp生成验证码
- 8张图理解Java
- Linux下解压和压缩文件的方式
- 都是was缓存惹的祸
- c++中vector的用法详解
- 使用ArrayList集合,对其添加100个不同的元素: 1.使用add()方法将元素添加到ArrayList集合对象中; 2.调用集合的iterator()方法获得Iterator对象,并调用Ite