稀疏矩阵的存储实现打印不出矩阵和三元表


#include <iostream>
using namespace std;
#define MAX 100
#define ERROR 0
#define OK 1
typedef int Status;
typedef struct
{
    int row,col;
    int item;
}Triple;
class TripleMatrix
{
    private:
        Triple data[MAX];
        int mu,nu,num;
    public:
        TripleMatrix();
        TripleMatrix(int m,int n);
        ~TripleMatrix();
        Status setItem(int row,int col,int item);
        int getItem(int row,int col);
        void printMatrix();
        void printTriple();


};

TripleMatrix::TripleMatrix()
{
    mu=0;
    nu=0;
    num=0;
}

TripleMatrix::TripleMatrix(int m,int n)
{
    mu=m;
    nu=n;
    num=0;
}

TripleMatrix::~TripleMatrix()
{

}

int TripleMatrix::getItem(int row,int col)
{
    int i;
    if(row>mu||col>nu)
        return 0;
    for(i=0;i<num;i++)
    {
        if(data[i].row==row&&data[i].col)
        {
            return data[i].item;
        }
    }
    return 0;
}

Status TripleMatrix::setItem(int row,int col,int item)
{
    if(row>mu||col>nu)
        return ERROR;
    if(num==MAX)
        return ERROR;
    if(item==0)
        return OK;
    int index=0;
    while(index<num)
    {
        if(row>data[index].row)
            index++;
        else if(row==data[index].row&&col>data[index].col)
            index++;
        else
            break;
    }
    int i;
    if(row==data[index].row&&(col=data[index].col))
    {
        data[index].item=item;
    }
    else
    {
        for(i=num;i>index;i++)
        {
            data[i]=data[i-1];
        }
        data[index].row=row;
        data[index].col=col;
        data[index].item=item;
        num++;
    }
}

void TripleMatrix::printMatrix()
{
    int tripleindex=0,i,j;
    cout<<"打印矩阵"<<endl;
    for(i=1;i<=mu;i++)
    {
        for(j=1;j<=nu;j++)
        {
            if(i==data[tripleindex].row&&j==data[tripleindex].col)
            {
                cout<<data[tripleindex].item<<"\t";
                tripleindex++;
            }
            else
                cout<<"0\t";
        }
        cout<<endl;
    }
    cout<<mu<<"行"<<nu<<"列"<<num<<"个非零元素"<<endl;
}

void TripleMatrix::printTriple()
{
    int i;
    cout<<"打印三元数组"<<endl;
    cout<<"row\tcot\titem"<<endl;
    for(i=0;i<num;i++)
    {
        cout<<data[i].row<<"\t"<<data[i].col<<"\t"<<data[i].item<<endl;
    }
}

void inputMatrix(int m,int n,int num,TripleMatrix& triple)
{
    int i,row,col,item;
    cout<<"请依次输入行,列和非零元:"<<endl;
    for(i=1;i<=num;i++)
    {
        cin>>row>>col>>item;
        if(item!=0)
        {
            if(triple.setItem(row,col,item)==ERROR)
            {
                cout<<"输入有误";
                break;
            }
        }
    }
}

int main()
{
    int m,n,num;
    cout<<"请输入矩阵的行,列和非零元素个数:"<<endl;
    cin>>m>>n>>num;
    TripleMatrix triple(m,n);
    inputMatrix(m,n,num,triple);
    triple.printTriple();
    triple.printMatrix();
    return 0;
}