数据结构七:矩阵

本文介绍了矩阵的概念,包括矩阵的定义和实现,特别是聚焦于特殊矩阵如三对角矩阵和三角矩阵。矩阵的实现采用行优先映射,而特殊矩阵如三对角矩阵和三角矩阵有特定的元素分布规则。三对角矩阵由三条对角线构成,存储时可以有多种映射方式。
摘要由CSDN通过智能技术生成

1. 矩阵的定义

矩阵可以描述为一个二元数组,矩阵的下标通常从1开始。下面是利用上节提到的行优先映射的方法来对矩阵进行实现。

1.1 矩阵的实现
#pragma once

#include <iostream>
//矩阵类
template<typename elemType>
class Matirx
{
protected:
    //矩阵的数据成员
    elemType* elems;//存储矩阵元素
    int rows, cols;//矩阵的行和列
private:
    //抽象数据类型及重载编译系统的默认方法声明
    Matirx(int rs, int cs);//构造函数
    ~Matirx();//析构函数
    int getRows() const;//返回矩阵的行数
    int getCols() const;//返回矩阵的列数

    elemType& operator()(int i, int j);
    Matirx(const Matirx<elemType> & copy);
    Matirx<elemType>& operator=(const Matirx<elemType> & copy);
};


template<typename elemType>
Matirx<elemType>::Matirx(int rs, int cs)
{
    if ( rs > 0 && cs > 0)
    {
        elems = new elemType[rs * cs];
        rows = rs;
        cols = cs;
    }
    else
    {
        std::cout << "行数或列数无效!" << std::endl;
    }
}

template<typename elemType>
Matirx<elemType>::~Matirx()
{
    if (elems != NULL) delete []elems;
}


template<typename elemType>
int Matirx<elemType>::getRows() const
{
    return rows;
}

template<typename elemType>
int  Matirx<elemType>::getCols() const
{
    return cols;
}


template<typename elemType>
elemType&  Matirx<elemType>::operator()(int i, int j)
{
    if (i < 1 || i > rows || j < 1 || j > cols)
    {
        std::cout << "下标越界!" << std::endl;
    }
    else
    {
        return elems[(i-1)*cols + j - 1]
    }
}

template<typename elemType>
Matirx<elemType>::Matirx(const Matirx<elemType> & copy)
{
    rows = copy.rows;
    cols = copy.cols;
    elems = new elemType[rows * cols];
    for (int i = 0; i < rows*cols; i++)
    {
        elems[i] = copy.elems[i];
    }
}


template<typename elemType>
Matirx<elemType>& Matirx<elemType>::operator=(const Matirx<elemType> & copy)
{
    if (&copy != this)
    {
        if (elems != NULL) delete[]elems;

        rows = copy.rows;
        cols = copy.cols;
        elems = new elemType[rows * cols];
        for (int i = 0; i < rows*cols; i++)
        {
            elems[i] = copy.elems[i];
        }
    }
}

2.特殊矩阵

如果值相同元素或者零元素在矩阵中按一定的规律分布,这样的矩阵称为特殊矩阵
下面介绍一些基本概念:
方阵:行数和列数相同矩阵,下面介绍的矩阵都是特殊矩阵。
对称矩阵:对于对称阵,对于所有的 i i j a(i,j)=a(j,i) a ( i , j ) = a ( j , i ) .
三对角阵:当

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值