稀疏矩阵三元组快速转置

#include <iostream>
using namespace std;
#define maxsize 100
typedef int ElemType;
//先定义一个三元组结构
typedef struct{
	int r;//行
	int c;//列
	ElemType value; 
}TupNode; 
//三元组顺序表
typedef struct{
	int rows;
	int cols;
	int nums;
	TupNode *data;
}TSMa; 

//稀疏矩阵三元组表示初始化
void InitTSMa (TSMa &SM,int R,int C);
void  CreateSMatrix(TSMa &SM);
void PrintSMatrix(TSMa SM);

int main()
{
	TSMa SM;
	int R,C;
	cin>>R>>C;
	InitTSMa(SM,R,C);
	CreateSMatrix(SM);
	PrintSMatrix(SM);
//	return 0;
}
void InitTSMa (TSMa &SM,int R,int C)
{
	SM.cols=C;
	SM.rows=R;
	SM.nums=0;
	SM.data=new TupNode [maxsize];
}
void  CreateSMatrix(TSMa &SM)
{
	cin>>SM.nums;
	for(int i=0;i<SM.nums;i++)
	{
		cin>>SM.data[i].r>>SM.data[i].c>>SM.data[i].value;
	}
}
void PrintSMatrix(TSMa SM)
{
	cout<<SM.rows<<" "<<SM.cols<<" "<<SM.nums<<endl;
	
	for(int i=0;i<SM.nums;i++)

        cout<<SM.data[i].r<<"  "<<SM.data[i].c<<"  "<<SM.data[i].value<<endl;
}
#include<iostream>

using namespace std;

#define MaxSize 100

typedef int ElemType;



//三元组结构体

typedef struct

{

    int row,col;       //行、列

    ElemType value;   //值

}Triple;



//稀疏矩阵的三元组表示

typedef struct

{

    int Rows, Cols, Terms;   //行数、列数、非零元素个数

    Triple *data;

}SparseMatrix;



//稀疏矩阵三元组表示初始化

void InitSMatrix (SparseMatrix &Sm,int Rw, int Cl)

{

    Sm.Rows = Rw;

    Sm.Cols = Cl;

    Sm.Terms = 0;

    Sm.data = new Triple[MaxSize];              //三元组表

};

void  CreateSMatrix(SparseMatrix &A)  //建立三元组表示的稀疏矩阵

{

    int i,m,n;

    ElemType e;

    //cout<<"请输入矩阵的非零元素个数:"<<endl;

    cin>>A.Terms;

    for(i = 0; i<A.Terms; i++)

    {

        //cout<<"请按行序输入第"<<i+1<<"个非零元素的行,列,元素值:(以空格隔开)"<<endl;

        cin>>m>>n>>e;

        A.data[i].row = m;    //行下标

        A.data[i].col = n;    //列下标

        A.data[i].value = e;    //该下标所对应的值

    }

}



void PrintSMatrix(SparseMatrix A)

{

    int i;

    //cout<<"行,列,非零元素个数为:";

    cout<<A.Rows<<" "<<A.Cols<<" "<<A.Terms<<endl;

    //cout<<"稀疏矩阵的三元组表示为:"<<endl;

    for(i=0;i<A.Terms;i++)

        cout<<A.data[i].row<<"  "<<A.data[i].col<<"  "<<A.data[i].value<<endl;

}



void FastTranspos(SparseMatrix A, SparseMatrix &C);//转置结果在C中

int main(int argc, const char * argv[]) {

    SparseMatrix A,C;

    int Rows,Cols;

    //cout<<"请输入矩阵的总行数:"<<endl;

    cin>>Rows;

    //cout<<"请输入矩阵的总列数:"<<endl;

    cin>>Cols;

    InitSMatrix(A,Rows,Cols);//初始化

    InitSMatrix(C,Cols,Rows);//初始化

    CreateSMatrix(A);//输入稀疏矩阵

    FastTranspos(A, C);

    PrintSMatrix(C);//输出稀疏矩阵

    return 0;

}

//三元组表示的稀疏矩阵的快速转置
void FastTranspos(SparseMatrix A, SparseMatrix &C) //转置结果在C中
{
    int rowsize [A.Cols];
	int rowstart[A.Cols];
	C.Cols=A.Rows;C.Rows=A.Cols;C.Terms=A.Terms;
	if(A.Terms>0)
	{
		for(int i=0;i<A.Cols;i++) rowsize[i]=0;
		for(int i=0;i<A.Terms;i++)
		{
			rowsize[A.data[i].col]++;
		}
		rowstart[0]=0;
		for(int i=1;i<A.Terms;i++)
		{
			rowstart[i]=rowstart[i-1]+rowsize[i-1];
		}
		
		for(int i=0;i<A.Terms;i++)
		{
			int j=rowstart[A.data[i].col];//j代表这是当前旧三元表第i元素新三元组的下标 
			C.data[j].col=A.data[i].row;
			C.data[j].row=A.data[i].col;
			C.data[j].value=A.data[i].value;
			rowstart[A.data[i].col]++;
		}
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值