数据结构 矩阵的转置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<>
#include <>
#define MAXSIZE 12500
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct
{
int i,j;
int e;
}Triple;
typedef struct
{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
Status CreateSMatrix(TSMatrix &M) {
int w,m,n;
while(1)
{
printf("请输入行:");
scanf("%d",&;
if>0)
{
break;
}
if<=0)
{
printf("行不能为0\n");
continue;
}
}
while(1)
{
printf("请输入列:");
scanf("%d",&;
if>0)
{
break;
}
if<=0)
{
printf("列不能为0\n");
continue;
}
}
printf("请输入非零元素:"); scanf("%d",&;
for(w=1;w<=;w++)
{
printf("请输入元素所在行,列,元素值:\n");
scanf("%d %d %d",&[w].i,&[w].j,&[w].e);
if[w].i<=0||[w].j<=0||[w].i>||[w].j>
{
printf("输入错误1!\n");
w--;
}
for(m=1;m<=w;m++)
{
for(n=0;n { if[m].i<[n].i) { printf("输入错误2!\n"); w--; break; } else if[m].i==[n].i&&[m].j<[n].j) { printf("输入错误3!\n"); w--; break; } else if[m].i==[n].i&&[m].j==[n].j) { printf("输入重复!\n"); w--; break; } } } } return OK; } Status ShowSMatrix(TSMatrix M) { int i,j,t=1; printf("矩阵为:\n"); for(i=1;i<=;i++) { for(j=1;j<=;j++) { if[t].i==i&&[t].j==j) { printf("%d\t",[t].e); t++; } else printf("0\t"); } printf("\n"); } return OK; } Status TransposeSMatrix(TSMatrix M,TSMatrix &T) { =;=;=; int col; int p,q; if { q=1; for (col=1;col<=;col++) { for(p=1;p<=;p++) { if[p].j==col) { [q].i=[p].j; [q].j=[p].i; [q].e=[p].e; ++q; } } } } printf("矩阵转置成功!\n"); printf("转置后的"); ShowSMatrix(T); return OK; } Status DestorySMatrix(TSMatrix &M) { =0; =0; return OK; } Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T) { int num[100]; int cpot[100]; int col,i,p,q; = ;T .nu = ; = ; if ( ) { for(col = 1; col <=; ++col) num[col] =0; for( i = 1; i <=; ++i) {col =[ i ] .j ; ++num [col] ;} cpot[1] =1; for(col = 2; col <=; ++col) cpot[col]=cpot[col-1]+num [col-1 ] ; for( p =1; p <= ; ++p ) { col =[p].j; q=cpot [col]; [q].i = [p]. j; [q].j = [p]. i; [q].e= [p]. e; ++cpot[col] ; } } printf("矩阵快速转置成功!\n"); printf("转置后的"); ShowSMatrix(T); return OK; }