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域分別用來儲存稀疏矩陣的行數,列數,非...