陣列和廣義表 講義實現
阿新 • • 發佈:2018-10-31
一般都是採用順序儲存的方式來表示陣列。
兩種順序儲存方式
- 以行序為主序儲存
- 以列序為主序儲存
無論是行優先還是列優先
- 開始節點的存放地址
- 維數和每維的上下界
- 每個陣列元素所佔用的空間數
多維陣列時
行優先:從右到左
列優先:從左到右
矩陣的壓縮儲存
為多個相同的非零元素只分配一個儲存空間,對零元素不分配空間。
對稱矩陣
三角矩陣
對角矩陣
稀疏矩陣
template <class T>
struct Triple
{
int i; //該非零元的行下標
int j; //該非零元的列下標
T e; //該非零元的值
};//三元組型別
template <class T>
class TSMatrix
{
public:
Triple<T> data[MAXSIZE+1];
int rows; //行數值
int cols; //列數值
int nums; //該非零元素的個數
public:
TSMatrix();
~TSMatrix();
Status InitMatrix(T *A, int rows, int cols);
Status TransMatrix(TSMatrix &M);
Status FastTransMatrix (TSMatrix &M);
Status DispMatrix(char name);
};
//矩陣轉置演算法實現
template <class T>
Status TSMatrix<T>::TransMatrix(TSMatrix &M)
{
//採用三元組表方式儲存,實現矩陣的轉置
rows = M.cols;
cols = M.rows;
nums = M.nums;
if(nums != 0)
{
int q = 0; //新三元組表T中的元素下標
//按M的列序號由小到大轉化
for(int col=0; col<M. cols; col++)
{
for(int p=0; p<M.nums; ++p)
{
//在三元組順序表M中查詢列下標等於col者
if(M.data[p].j == col)
{
data[q].i = M.data[p].j;
data[q].j = M.data[p].i;
data[q].e = M.data[p].e;
q++;
}
}
}
}
return OK;
}