資料結構 C 下的稀疏矩陣

2021-09-30 19:36:38 字數 2867 閱讀 2887

c++下的稀疏矩陣

資料結構中關於稀疏矩陣的學習
矩陣中元素為0的佔比大於不為0元素佔比的矩陣(ps: 下面**並沒有嚴格按照這個去判斷是否為稀疏矩陣。 只是寫了 稀疏矩陣的部分方法 為了研究一下矩陣的資料結構)
定義記錄非元素值和位置的結構體

struct item

;

2.稀疏矩陣類的資料宣告

private:

int cols;//列數

int rows;//行數

int item_count;//不為0元素的個數

item* aitms;//不為0的結構體陣列

int max_size;//最大 個數

宣告轉置矩陣 列數= 當前矩陣的行數 行數=當前矩陣的列數 稀疏元素個數相同

b.cols = this->rows;

b.rows = this->cols;

b.item_count = this->item_count;

從原矩陣的第一列開始(因為反轉後第一列就是新矩陣的第一行,所以第一列的第乙個非0元素即為轉置矩陣的第乙個非0的元素) 沿列遍歷,檢視原稀疏矩陣的當前位置是否有稀疏元素.有則加到轉置矩陣中 並且個數+1;

for(int icol=1;icol<=this->cols;icol++)

}}

1.同時游動兩個稀疏陣列 如果兩個稀疏數不在同一位置 將位置較前的乙個先加入新的矩陣裡

2.如果兩個位置相同則判斷兩個相加是否為0 不為0則加入其值其位置

3.因為同時遍歷兩個矩陣陣列,所以可能乙個結束後另乙個還沒結束 所以結束後應將所有的未遍歷到的直接加入.

sparsematrixadd(const sparsematrix&b) const

sparsematrixa(this->max_size);

a.cols = this->cols;

a.rows = this->rows;

a.item_count = 0;

int count_t = 0;//this的陣列下標

int count_b = 0;//b的陣列下標

while (count_bitem_count)

}else

}//新增沒有加進去的

for(;count_bitem_count;count_t++)

return a;

}

#ifndef sparsematrix_h

#define sparsematrix_h

template class sparsematrix;

template struct item

;#include using namespace std;

template class sparsematrix

max_size = _maxsize;

aitms = new item[max_size];

item_count = rows = cols = 0;

}~sparsematrix()

/*** @brief transpose

* @param b

* 儲存this的轉置矩陣到b中

*/void transpose(sparsematrix&b) const

/*** 正常的矩陣轉置後行列數互換**/

b.cols = this->rows;

b.rows = this->cols;

b.item_count = this->item_count;

delete b.aitms;

int count = 0;

/*** 轉置的原理為 行列互換

* 所有新生成的稀疏矩陣的記錄應根據原矩陣縱向非0的排列為轉置後的橫向順序 並切換其col/row

* 所以從第一列開始取原非0值**/

for(int icol=1;icol<=this->cols;icol++)}}

}//新增乙個非0值

aitms[item_count++] = t;

}/**

* @brief add

* @param b

* @return

* 稀疏矩陣相加

*/sparsematrixadd(const sparsematrix&b) const

sparsematrixa(this->max_size);

a.cols = this->cols;

a.rows = this->rows;

a.item_count = 0;

int count_t = 0;//this的陣列下標

int count_b = 0;//b的陣列下標

while (count_bitem_count)

}else

}//新增沒有加進去的

for(;count_bitem_count;count_t++)

return a;

}friend istream& operator>>(istream& input,sparsematrix&x)

}return input;

}/**

* @brief operator <<

* @param output

* @param x

* @return

*/friend ostream& operator<<(ostream& output,const sparsematrix&x)

;#endif // sparsematrix_h

資料結構 稀疏矩陣

稀疏矩陣 矩陣中有效資料的個數遠遠小於無效資料的個數,則可以稱之為稀疏矩陣 如果還像以前那樣將每個稀疏矩陣的資料都儲存起來,則會造成記憶體的很大程度的浪費,所以應用特別的儲存方式。稀疏矩陣的壓縮儲存 使用 三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後順序依次存放。矩陣的轉置 將...

資料結構 稀疏矩陣

簡單的說,設矩陣amn中有s個非零元素,若s遠遠小於矩陣元素的總數,則稱a為稀疏矩陣。s與m x n的比稱為矩陣的稀疏因子。當用陣列儲存稀疏矩陣中的元素時,僅有少部分的空間被利用,造成空間的浪費,為了節省儲存空間,可以採用一種壓縮的儲存方法來表示稀疏矩陣。由於非零元素的分布一般是沒有規律的,因此在儲...

資料結構 稀疏矩陣

稀疏矩陣時矩陣中的一種特殊情況,其非零元素的個數遠遠小於零元素個數。1.順序儲存 非零元素三元組的結構定義 struct triple 其中row代表行號,col代表列號,val用來儲存元素值 稀疏矩陣的順序儲存型別定義 struct smatrix m,n,t域分別用來儲存稀疏矩陣的行數,列數,非...