?? sparsematrix.cpp
字號:
#include "SparseMatrix.h" //引用三元組順序表的頭文件
#include <string> //引用string庫函數的頭文件
using namespace std;//指出后續的所有的程序語句都在名字空間std內
/*
前置條件:三元組順序表不存在
輸入:三元組順序表的行數(intmu)、列數(intnu)、非零元個數(inttu)、初始三元組(datatemp[])
功能:三元組順序表的初始化
輸出:無
后置條件:建立一個三元組順序表
*/
template <class T>
SparseMatrix<T>::SparseMatrix(int intmu,int intnu,int inttu,element<T> datatemp[])
{
if (inttu >MaxTerm ) throw "構造函數的初始化參數不正確";
mu = intmu;nu = intnu;tu = inttu;
for(int i=0;i<inttu;i++)
{
data[i] = datatemp[i];
}
}
/*
前置條件:三元組順序表已存在
輸入:下標(intnumber)
功能:讀取這組下標對應的數組元素
輸出:對應元素
后置條件:三元組順序表不變
*/
template <class T>
element<T> SparseMatrix<T>::GetMatrix(int intnumber)
{
if(intnumber>=tu || intnumber < 0) throw "輸入位置不正確";
return data[i];
}
/*
前置條件:無
輸入:無
功能:顯示三元組順序表
輸出:無
后置條件:建立一個三元組順序表
*/
template <class T>
void SparseMatrix<T>::Prt()
{
for(int i=0;i<tu;i++)
{
cout<<data[i].col<<" "<<data[i].row<<" "<<data[i].item<<"\n";
}
}
/*
前置條件:無
輸入:待轉置的源三元組順序表(A)和目標三元組順序表(B)的引用
功能:對三元組順序表進行轉置
輸出:無
后置條件:三元組順序表A的轉置結果放在了B中
*/
template <class T>
void SparseMatrix<T>::Trans1(SparseMatrix<T> &B)
{
int pb,pa;
B.mu=this->nu; B.nu=this->mu; B.tu=this->tu;//設置行數、列數、非零元素個數
if (B.tu>0) //有非零元素則轉換
{
pb = 0;
for (int col=0; col<this->nu; col++) //依次考察每一列
for (pa=0; pa<this->tu; pa++) //在A中掃描整個三元組表
if (this->data[pa].col==col ) //處理col列元素
{
B.data[pb].row= this->data[pa].col ;
B.data[pb].col= this->data[pa].row ;
B.data[pb].item= this->data[pa].item;
pb++;
}
}
}
/*
前置條件:無
輸入:待轉置的源三元組順序表(A)和目標三元組順序表(B)的引用
功能:對三元組順序表進行轉置
輸出:無
后置條件:三元組順序表A的轉置結果放在了B中
*/
template <class T>
void SparseMatrix<T>::Trans2(SparseMatrix<T> A, SparseMatrix<T> &B)
{
int i,j,k,num[MaxTerm],cpot[MaxTerm];
B.mu=A.nu; B.nu=A.mu; B.tu=A.tu;//設置行數、列數、元素個數
if (B.tu>0) //有非零元素則轉換
{
for (i=0; i<A.nu; i++) //A中每一列非零元素的個數初始化為0
num[i]=0;
for (i=0; i<A.tu; i++)//求矩陣A中每一列非零元素的個數
{
j= A.data[i].col; //取三元組的列號
num[j]++;
}
cpot[0]=0; //A中第0列第一個非零元素在B中的位置為0
for (i=1; i<A.nu; i++) //求A中每一列第一個非零元素在B中的下標
cpot[i]= cpot[i-1]+num[i-1];
for (i=0; i<A.tu; i++)//掃描三元組表A
{
j=A.data[i].col; //當前三元組的列號
k=cpot[j]; //當前三元組在B中的下標
B.data[k].row= A.data[i].col ;
B.data[k].col= A.data[i].row ;
B.data[k].item= A.data[i].item;
cpot[j]++; //預置同一列的下一個三元組的下標
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -