Объектно-ориентированное программирование на C++. Андрианова А.А - 167 стр.

UptoLike

Объектно-ориентированное программирование на С++
3.3.3.Использование класса «Динамический список» для
хранения разреженных матриц
Разреженной называется матрица, которая содержит большое
количество нулевых элементов. Такие матрицы нередко возникают в
задачах линейной алгебры, математической физики и оптимизации.
Хранение этих матриц традиционным способом требует существенных
затрат памяти. Особенно это неэффективно при больших размерах
матрицы и большом количестве нулевых элементов. В этом случае
матрицу можно хранить в виде списка, содержащего только ненулевые
элементы.
Для представления разреженной матрицы можно использовать
следующую систему классов:
класс для хранения одного элемента матрицы, который содержит
индексы этого элемента и его значение (MatrixElement);
класс для хранения элемента матрицы в списке, содержащий объект
класса MatrixElement и адрес следующего элемента списка
(ListElement);
класс представления всей матрицы в виде списка, содержащий
размеры матрицы, количество ненулевых элементов и адрес первого
элемента списка (MatrixList);
классы исключений BadIndexException, BadDimension-
Exception, NonSquareMatrixException.
Приведем объявления этих классов:
// предварительное объявление класса список
class MatrixList;
// класс одного элемента матрицы
class MatrixElement
{
private:
int i, j; // индексы элемента
double value; // значение элемента
friend class MatrixList;
public:
// конструктор элемента матрицы
MatrixElement(int, int, double);
// дружественные функции ввода/вывода
// элемента матрицы
167
                           Объектно-ориентированное программирование на С++
3.3.3.Использование класса «Динамический список» для
                        хранения разреженных матриц

     Разреженной называется матрица, которая содержит большое
количество нулевых элементов. Такие матрицы нередко возникают в
задачах линейной алгебры, математической физики и оптимизации.
Хранение этих матриц традиционным способом требует существенных
затрат памяти. Особенно это неэффективно при больших размерах
матрицы и большом количестве нулевых элементов. В этом случае
матрицу можно хранить в виде списка, содержащего только ненулевые
элементы.
     Для представления разреженной матрицы можно использовать
следующую систему классов:
   • класс для хранения одного элемента матрицы, который содержит
      индексы этого элемента и его значение (MatrixElement);
   • класс для хранения элемента матрицы в списке, содержащий объект
      класса MatrixElement и адрес следующего элемента списка
      (ListElement);
   • класс представления всей матрицы в виде списка, содержащий
      размеры матрицы, количество ненулевых элементов и адрес первого
      элемента списка (MatrixList);
   • классы исключений BadIndexException, BadDimension-
      Exception, NonSquareMatrixException.

    Приведем объявления этих классов:

     // предварительное объявление класса список
     class MatrixList;

     // класс одного элемента матрицы
     class MatrixElement
     {
     private:
          int i, j;      // индексы элемента
          double value; // значение элемента
          friend class MatrixList;
     public:
          // конструктор элемента матрицы
          MatrixElement(int, int, double);
          // дружественные функции ввода/вывода
          // элемента матрицы
                                                                       167