矩阵的自然连接

数据结构作业,实现两个矩阵的自然连接:

2,2,3
1,3,2的第三列

3,1
2,4的第一列链接
2,2,3,3,1
1,3,2,2,4

算法不难,就是两个遍历,如果目标i,j一样,拼接起来添加到matrix里面去(自己写的一个类)。

但代码被老师怼了,说风格不行。后面仔细看了以下,发现面向过程的痕迹太严重了,把读数据,拼接,输出结果通通放在一个函数里面了,改了俩小时,最后把函数封装到MATRIX类里面了,

加上ppt总算弄完了。记录一下,下面是封装的拼接函数,以后切记注意代码的可移植性。(这个matrix是用链表加顺序表实现的)

Matrix join(const Matrix &b, int m, int n)//m,n是两个目标行i,j。
{
if((getcol()==0)||(getrow()==0)||(b.getcol()==0)||(b.getrow()==0))
{
    cout<<"输入矩阵无法完成拼接操作!返回a的值!"<<endl;
    return *this;
}
if(m<0||n<0||getcol()<m||b.getcol()<n)
{
    cout<<"输入i,j超过当前矩阵范围超标!返回a!"<<endl;
    return *this;
}
Matrix temp(getcol()+b.getcol(),getrow()*b.getrow());
int f=-1;
for(int i=0;i<getrow();i++)
{
    for(int j=0;j<b.getrow();j++)
    {
        if((*this)[i][m]==b[j][n])
        {//cout<<a[i][m]<<" "<<b[j][n]<<endl;
            f++;
            for(int o=0;o<getcol();o++)
            {
               temp[f][o] = (*this)[i][o];
            }
            for(int o=getcol();o<b.getcol()+getcol();o++)
            {
               temp[f][o] = b[j][o-getcol()];
            }
        }
    }
}
Matrix c(getcol()+b.getcol(),f+1);

for(int i=0;i<f+1;i++)
{
    for(int j=0;j<getcol()+b.getcol();j++)
    {
        c[i][j] = temp[i][j];
    }
}
if(c.getcol()==0||c.getrow()==0)
{
    cout<<"无拼接结果!"<<endl;
}
cout<<c<<endl;
return c;               // 返回值0, 返回操作系统
}

猜你喜欢

转载自www.cnblogs.com/guairenkuangren/p/12060071.html